Шаблон представления Django не может отображать данные модели

#django #django-models #django-views #django-templates #django-filter

#django #django-модели #django-представления #django-шаблоны #django-filter

Вопрос:

Я определил модель под названием Visit. Существует несколько моделей.

В models.py

 class Visit(models.Model):
    case = models.ForeignKey(Case, on_delete = models.CASCADE)
    location = models.ForeignKey(Location, on_delete = models.CASCADE)
    date_from = models.DateField()
    date_to = models.DateField()
    category = models.CharField(max_length = 20)
  

Затем я создал шаблон представления. Он предназначен для просмотра всех посещений, сделанных конкретным случаем.
Так что, если URL-адрес «sth / visit / 1», он показывает все посещения case с pk1.

в views.py

 class VisitView(TemplateView):
    template_name = "visit.html"
    def get_context_data(self, **kwargs):
        case_pk = self.kwargs['case']
        context = super().get_context_data(**kwargs)
        context['visit_list'] = Visit.objects.filter(case = case_pk)
        print("context[visit_list]: ",context['visit_list'])
  

Я напечатал контекст [‘visit_list’] в консоли
для URL-адреса «sth / visit / 1», он показывает

 context[visit_list]:  <QuerySet [<Visit: Visit object (1)>, <Visit: Visit object (2)>]>
  

для URL-адреса «sth / visit / 2» он показывает

 context[visit_list]:  <QuerySet [<Visit: Visit object (3)>]>
  

поэтому я предполагаю, что до этого момента это работает.
но в документе html

 <ul>
{% for visit in visit_list %}
  <li>[{{visit.date_from }}] {{ visit.date_to }} </li>
{% empty %}
  <li>No visit yet.</li>
{% endfor %}
</ul>
  

он пока не показывает посещение. как для 1, так и для 2. Нет сообщения об ошибке. Просто нет посещения.
Могу ли я узнать, в чем проблема? Большое вам спасибо, пожалуйста, помогите TOT. Я застрял здесь уже несколько часов.

Ответ №1:

Да, потому что вы не возвращаете контекст в шаблон, поэтому к переменным контекста невозможно получить доступ

 class VisitView(TemplateView):
    template_name = "visit.html"
    def get_context_data(self, **kwargs):
        case_pk = self.kwargs['case']
        context = super().get_context_data(**kwargs)
        context['visit_list'] = Visit.objects.filter(case = case_pk)
        print("context[visit_list]: ",context['visit_list'])
        return context
  

Комментарии:

1. Действительно спасибо, что ответили на такой глупый вопрос…….. Я думаю, что мой мозг отключился после выполнения этого задания в течение> 24 часов