这几乎感觉太简单了,但是我试图在模板中显示一个对象,并且不能使用基于函数/类的视图,因为该视图必须位于base.html模板(用于所有视图)上。
当我在视图中将对象定义为变量时,我完全可以解决这个问题。我的问题真的是关于不使用view.py时如何使其工作
base.html
<!-- works -->
{{ user.username }}
<!-- doesn't work -->
{{ custom_model.field }}
我签出了Django模板语言,并以他们的故事模型为例。
附加信息希望解决Willem Van Onsem的问题。
我将在导航栏中添加整个网站的标题。也许有更好的方法可以做到这一点?
models.py
class Headline(models.Model):
description = RichTextUploadingField(blank=True, null=True)
active = models.BooleanField(default=False)
context_processors.py#在问题创建后添加
def active_headline(request):
from portfolios.models import Headline
return {'headline': Headline.objects.filter(active=True)}
settings.py#问题创建后的添加
TEMPLATES = [
{
...
'OPTIONS': {
'context_processors': [
...
# for site-wide headlines
'portfolios.context_processors.active_headline'
],
},
},
]
base.html
{{ headline | truncatechars_html:150 | safe }}
您可以通过使用自定义上下文处理器[Django-doc]将额外的数据“注入”到模板中:
因此,您可以定义一个上下文处理器,例如在app/context_processors.py
:
# app/context_processors.py
def some_model_object(request):
from app.models import SomeModel
return {'my_object': SomeModel.objects.first()}
然后在设置中,添加自定义上下文处理器:
# settings.py
# …
TEMPLATES = [
{
# …
'OPTIONS': {
'context_processors': [
# …
'app.context_processors.some_model_object'
]
}
# …
}
]
如果现在渲染模板,则Django会自动将自定义上下文处理器的词典中返回的项目添加到模板的上下文中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句