【问题标题】:Django - Generic detail_view doesn't accept an object_listDjango - 通用 detail_view 不接受 object_list
【发布时间】:2017-09-28 15:01:33
【问题描述】:

我在 urls.py 中有以下内容:

url(r'frameworkslist/(?P<pk>\d+)$', DetailView.as_view(queryset=Category.objects.all().order_by("id"), template_name='home/subcategory.html'))

在我的 html 模板中:

{% extends "Layout.html" %}

{% block content %}

  {{ subcategory.Name }}
  {% for item in object_list %}
      <h5> <a href="/search/{{ item.id }}">{{ item.Name }}</a> </h5>
  {% endfor %}
  <a href = "/frameworkslist/">Back to framework list</a>
{% endblock %}

我想知道为什么 object_list 是空的,但是当我将我的 url 更改为以下时,它起作用了。 (返回 ListView 模板而不是 DetailView):

url(r'frameworkslist/(?P<pk>\d+)$', ListView.as_view(queryset=Subcategory.objects.all().order_by("id"), template_name='home/subcategory.html'))

还要注意,将变量“model=Subcategory”传递给 DetailView 似乎会返回 Subcategory 表的第一条记录(或者应该是单个模型)并将其传递给模板。所以我的问题分为两部分,第二部分是:你如何将对象集合到 DetailView 模板?

【问题讨论】:

    标签: python django listview detailsview django-generic-views


    【解决方案1】:

    DetailView 用于查看单个对象,ListView 用于查看对象列表。通常的模式是你有一个ListView,它链接到许多单独的东西(比如产品),然后通过DetailView查看每个产品。

    ListView 是使用您的查询集自动填充object_list 变量的那个。

    DetailView 的情况下,它获取您提供的查询集,然后使用url 中的变量到get() 一个单一的。在您的示例中,这将是 Subcategory.objects.all().order_by("id").get(pk={some number})。然后默认情况下将其提供给 object 变量中的模板。

    Lots more info on class based views here.


    附带说明,您应该在模板中使用{% url %} tag,而不是硬编码网址。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-22
      • 2013-03-31
      • 2018-05-18
      • 2018-05-07
      • 1970-01-01
      • 1970-01-01
      • 2015-03-21
      • 2016-10-31
      相关资源
      最近更新 更多