Django 视图模板无法显示模型数据

Posted

技术标签:

【中文标题】Django 视图模板无法显示模型数据【英文标题】:Django view template can't show model data 【发布时间】:2021-02-14 18:36:26 【问题描述】:

我定义了一个名为 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”,就显示出pk1的case的所有访问。

在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'])

我在控制台中打印了 context['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

【讨论】:

真的很感谢你回答了这么愚蠢的问题............我觉得我的大脑在完成这个任务>24小时后被击倒了

以上是关于Django 视图模板无法显示模型数据的主要内容,如果未能解决你的问题,请参考以下文章

无法在模板中显示评论

无法将参数从模板传递到 Django 视图

Django 无法显示提供的注销模板

我无法让这个外键表值显示在 django 模板中

检查元素是不是在模型中 - Django 模板

没有在 html 模板 django 中显示模型值