我有一个模型团队,其属性名称为:
class Team(models.Model):
name = models.CharField(max_length=50, null=True, blank=True)
我想将团队名称放在网站的标题中,就像我的模板语言那样:
{% if team.name %}
<h1>{{ team.name }}</h1>
{% endif %}
但是,仅当我在对团队模型进行查询的视图上时才显示名称。所以我想我需要在所有视图/模板中都可以使用该查询。最好的方法是什么?
答案 0 :(得分:1)
您要为每个 模板调用设置的变量(当然,您不必使用本身,但是通常在几乎所有的变量中使用它们时,它都会有所作为模板),可以使用上下文处理器设置。
上下文处理器是将request
参数作为输入并返回将变量名(即字符串)映射到该参数应携带的内容的字典的函数,例如:
# myapp/context_processors.py
def first_team(request):
return { 'first_team': Team.objects.first() }
我们可以将它们存储在一个应用程序下(无关紧要的是哪个,但通常是语义上最接近上下文处理器正在执行的操作的一个)。
接下来,我们可以在settings.py
中注册上下文处理器。我们可以更改TEMPLATES
设置,并注册上下文处理器:
# settings.py
TEMPLATES = [
{
# ...
'OPTIONS': {
'context_processors': [
# ...
'myapp.context_processors.first_team',
# ...
],
},
# ...
},
]
实际上,您很可能已经有一些上下文处理器而没有注意到。
接下来,您可以在渲染的每个模板中使用{{ first_team }}
(及其衍生产品)(渲染时不覆盖设置)。请注意,在上下文处理器中为变量命名时必须小心,因为它们可以覆盖现有变量。