从Django基础模板中访问模型数据
我有一个叫做 Category
的模型,我希望它的对象总是能在我的 base.html
模板中显示在导航菜单里 (这个模板是我所有其他模板的基础)。
我想学习一些最佳实践,所以想知道把这些数据提供给模板的正确方法是什么。
3 个回答
0
给使用较新版本Django(比如1.9)的朋友们提个醒:Django定义上下文处理器的方式发生了变化。现在你不需要再往TEMPLATE_CONTEXT_PROCESSORS
里添加内容了,只需在Django的上下文处理器列表中添加一行就可以了:
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
],
},
},
]
希望这对你有帮助!
10
使用自定义的上下文处理器:
在 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",
)
5
你可以为分类创建一个自定义标签,然后把它放在基础模板里。这样的话,你就不需要在每个视图中都发送一个“分类”变量了。
祝你好运!