繁体   English   中英

Django 模板:在不使用视图的模板中显示对象

[英]Django template: Display object in template not using view

这几乎感觉太简单了,但我试图在我的模板中显示一个对象,我不能使用基于函数/类的视图,因为这需要在 base.html 模板上(对于所有视图)。

我完全明白了这个问题,因为当我将对象定义为视图中的变量时,我可以让它工作。 我的问题实际上是关于在不使用 view.py 时如何使其工作

基本文件

<!-- works -->
{{ user.username }}
<!-- doesn't work -->
{{ custom_model.field }}

我查看了Django 模板语言并以他们的故事模型为例。


附加信息希望解决 Willem Van Onsem 的问题。

我将在导航栏中添加全站标题。 也许有更好的方法来做到这一点?

模型.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'
            ],
        },
    },
]

基本文件

{{ headline | truncatechars_html:150 | safe }}
  • 在这里遇到一些渲染问题,其中 HTML 不显示,但查询集文本和括号 [] 显示在我的页面上。

您可以通过使用自定义上下文处理器[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 会自动将自定义上下文处理器的字典中返回的项目添加到模板的上下文中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM