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.