我有一个模型Category
,我希望它的对象始终显示在我的base.html
模板的导航菜单中(我所有其他模板都扩展了)
我想学习最佳实践,以便了解向模板提供此数据的正确/可接受的方式是什么。
答案 0 :(得分:4)
我会使用自定义上下文处理器:
在context_processors.py中:
def categories(request):
return {
'categories': Categories.objects.all()
}
并将其添加到settings.py:
TEMPLATE_CONTEXT_PROCESSORS = (
# ... django's default context processors
"your_app.context_processors.categories",
)
答案 1 :(得分:2)
您可以为类别创建custom tag并将其放在基本模板中。这样你就不必在每个视图上向上下文发送“category”变量..
祝你好运
答案 2 :(得分:0)
对于使用更高版本的Django(即1.9)的任何人来说,只是一个方向:Django定义其上下文处理器的方式已经改变。您可以在Django的上下文处理器列表中添加一行,而不是添加到TEMPLATE_CONTEXT_PROCESSORS
:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'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',
'app.context_processors.your_processor', # CHANGE THIS
],
},
},
]
希望这有帮助!