如何将数据库中的变量放入 base.html 模板?
Posted
技术标签:
【中文标题】如何将数据库中的变量放入 base.html 模板?【英文标题】:How to put variable from database into base.html template? 【发布时间】:2016-03-18 20:00:22 【问题描述】:我正在处理一个网页。 footer
将有联系方式,如电子邮件或电话。这个footer
应该无处不在,所以它在每个template/html
扩展的base.html
中。
我创建了一个名为ContactAdmin
的表,为管理员提供简单直接的界面来更改他的联系信息。这就是问题所在。
base.html
没有视图(它只是用于扩展),所以我不知道如何将变量放在那里 - email
,telephone
来自表 ContactAdmin
。我想过把它放到每一个视图中,这在我看来是一个巨大的矫枉过正。
那么如何让Django从数据库中读取这些变量并将它们放入base.html
?
ContactAdmin 表应该只有一行
【问题讨论】:
【参考方案1】:您不需要编辑所有视图。正是对于这种情况,django 有template context processors。这里的好处是,由于基本模板仍然是模板语言的一部分,并且它可以访问Context
,您只需在自定义上下文处理器中设置这些变量,一切都应该按原样工作。
一些关于如何编写自定义上下文处理器的示例:
*** Example Django example【讨论】:
【参考方案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
你的项目/settings.py
TEMPLATES = [
...
'OPTIONS':
'context_processors': [
...
'yourapp.context_processors.contact',
]
]
我猜这些联系人设置不会经常更改。所以你可能对caching的查询结果也感兴趣。
【讨论】:
以上是关于如何将数据库中的变量放入 base.html 模板?的主要内容,如果未能解决你的问题,请参考以下文章