如何将数据传递给django布局(如';base.html';),而不必通过每个视图提供数据?
我正在尝试将数据传递到layout如何将数据传递给django布局(如';base.html';),而不必通过每个视图提供数据?,html,django,django-templates,django-views,Html,Django,Django Templates,Django Views,我正在尝试将数据传递到layout'base.html'。我目前正在将数据存储在request.session中,并通过request对象在'base.html'中访问它 是否有任何方法可以将数据传递到'base.html',而不必从每个视图传递数据?如果(几乎)每个模板都需要这些数据,那么使用上下文处理器是有意义的。从django文档: context_processors选项是一个可调用项列表,称为context processors,它们将请求对象作为参数,并返回要合并到上下文中的项的字典
'base.html'
。我目前正在将数据存储在request.session
中,并通过request对象在'base.html'
中访问它
是否有任何方法可以将数据传递到'base.html'
,而不必从每个视图传递数据?如果(几乎)每个模板都需要这些数据,那么使用上下文处理器是有意义的。从django文档:
context_processors选项是一个可调用项列表,称为context processors,它们将请求对象作为参数,并返回要合并到上下文中的项的字典
使用上下文处理器,它正是为此目的而设计的。在一个应用程序目录中创建一个文件
context\u processors.py
,然后在该文件中定义一个函数,该函数返回要插入到每个模板上下文中的变量字典,如下所示:
def add_variable_to_context(request):
return {
'testme': 'Hello world!'
}
在设置中启用上下文处理器(django>=1.8):
然后在每一个你可以写的模板中
{{testme}}
它将呈现为
你好,世界代码>
更多信息请参见是的,上下文处理器或中间件,它们都有大量文档。这就足够了。谢谢,lota还可以使用自定义过滤器。如果要注入的数据是动态的,该怎么办nature@HassanBaig您可以根据需要自定义将变量添加到上下文中。例如,您可以导入Django模型,执行一些查询,并在每个模板中插入一些动态内容。在这个例子中,我使用了一个字符串文字来保持代码的简单易懂。
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [root('templates'),],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'yourapp.context_processors.add_variable_to_context',
],
},
},
]