Hel*_*nar 19 django django-templates
我有一个基本模板文件(base.html),每个其他模板都扩展到它,并使用其块生成内容.某些变量(例如nav_obj)用于基本模板文件中.
视图:
nav_obj = NavigationObject.objects.all()
Run Code Online (Sandbox Code Playgroud)
基本模板:
{% for object in nav_obj %}
<a href="{{ object.link }}">{{ object.title }}</a>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
目前,我需要在每个视图中传递nav_obj.有没有办法自动发送?
正如已接受的答案已经说过的那样,使用上下文处理器。以下是如何让它们与当前 Django 版本一起工作:
首先,创建一个接受请求并返回包含全局模板变量的字典的函数:
def load_nav_obj(request):
nav_obj = NavigationObject.objects.all()
return {'nav_obj': nav_obj}
Run Code Online (Sandbox Code Playgroud)
此函数的最佳位置是在context_processors.py主应用程序的文件中。
现在,告诉您的应用程序对所有呈现的模板使用此上下文处理器。在您的 中 settings.py,添加myapp.context_processors.load_nav_obj设置TEMPLATE:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
# Insert your context processors here
'django.contrib.auth.context_processors.auth',
'django.template.context_processors.debug',
'django.template.context_processors.i18n',
'django.template.context_processors.media',
'django.template.context_processors.static',
'django.template.context_processors.tz',
...
'myapp.context_processors.load_nav_obj',
],
},
},
]
Run Code Online (Sandbox Code Playgroud)
就是这样!{{nav_obj}}您现在可以在所有模板中使用该变量!