我正在开发一个网页。 footer
会有电子邮件或电话联系。这个footer
应该在任何地方,因此它位于base.html
,每个template/html
都会扩展。
我创建了一个名为ContactAdmin
的表,为管理员提供简单明了的界面来更改他的联系信息。这就是问题所在。
base.html
没有视图(仅用于扩展),因此我不知道如何将变量 - email
,telephone
放在表ContactAdmin
中。我想把它放在每个视图中,这在我看来是一个巨大的矫枉过正。
那么如何让 Django 从数据库中读取这些变量并将它们放入base.html
?
ContactAdmin 表应该只有一行
答案 0 :(得分:4)
您无需编辑所有视图。正是在这种情况下,django有template context processors。这里的优点是,由于基本模板仍然是模板语言的一部分,并且它可以访问Context
,您只需要在自定义上下文处理器中设置这些变量,一切都应该按原样运行。 / p>
有关如何编写自定义上下文处理器的一些示例:
答案 1 :(得分:2)
您可以将上下文处理器用于此目的。例如:
yourapp / context_processors.py
def contact(request):
from yourapp.models import ContactAdmin
contacts = ContactAdmin.objects.all()
return {
'contacts': contact, # Add 'contacts' to the context
}
yourproject / settings.py
TEMPLATES = [
{
...
'OPTIONS': {
'context_processors': [
...
'yourapp.context_processors.contact',
]
}
}
]
我猜这些联系人设置不会经常变化。因此,您可能也会对caching查询结果感兴趣。