Django - Как отобразить определенное содержимое в шаблоне

Вопрос новичка в Django - мне нужно отобразить определенную запись в шаблоне. До сих пор мне не удавалось заставить это работать. У меня есть следующий код:

модель:

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

    def __str__(self):
        return self.title

view:

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

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

template:

{% block content %} 

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

{% endblock content %}

Для решения этого вопроса нам потребуется больше информации, но я предполагаю, что поскольку get_queryset возвращает QuerySet, который является итерабельным, для отображения тела в вашем шаблоне необходимо использовать цикл for :

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

В любом случае, использование TemplateView для возврата единственного элемента filter(id=1), кажется, указывает на то, что вам нужно углубиться в документацию, этот вид представления стремится быть общим, а не возвращать единственный элемент с уникальным 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.

Вернуться на верх