Django - 如何在模板中显示特定内容

Django - How to display specific content in a template

Django 新手问题 - 我需要在模板中显示特定条目。到目前为止,我还没有能够让它发挥作用。我有以下代码:

型号:

class BasicPage(models.Model):
    title = models.CharField(max_length=200)
    body = HTMLField()

    def __str__(self):
        return self.title

查看:

class TermsPageView(TemplateView):
    model = BasicPage
    template_name = 'terms.html'

    def get_queryset(self):
        body = BasicPage.objects.filter(id=1)
        return body

模板:

{% block content %} 

<h1>{{ body.title }}</h1>

{% endblock content %}

我们需要更多信息来解决这个问题,但我想,因为 get_queryset returns 是一个可迭代的 QuerySet,要在您的模板中显示正文,您需要使用 for循环:

{% block content %} 
{% for i in body %}
<h1>{{ i.title }}</h1>
{% endfor %}
{% endblock content %}

无论如何,使用TemplateView到return单个项目filter(id=1)似乎表明您需要深入挖掘文档,这种观点旨在通用,而不是return 具有唯一 ID 的单个项目。

要将此对象作为上下文传递,您需要使用 get_context_data:

class TermsPageView(TemplateView):
    model = BasicPage
    template_name = 'terms.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['body'] = BasicPage.objects.get(id=1)
        return context

请注意,这是使用 get,因此您只会得到一个对象。但是如果你真的想使用查询集(如果你使用 filter),那么你需要像@May.D 指出的那样遍历列表。