Django - Generic detail_view不接受object_list

时间:2017-05-01 06:05:59

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

我在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是空的但是当我将我的网址更改为以下内容时,它有效。 (返回详情视图 ListView 模板 ):

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表的第一条记录(或应该是单一模型)并将其传递给Template。所以我的问题是两部分,第二部分是:你如何将一组对象收集到DetailView模板?

1 个答案:

答案 0 :(得分:1)

DetailView用于查看单个对象,而ListView则用于查看对象列表。通常情况下,模式是ListView,其中包含许多单独事物(如产品)的链接,然后通过DetailView查看每个产品。

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

如果是DetailView,则会使用您提供的查询集,然后将网址中的变量用于get()单个变量。在您的示例中Subcategory.objects.all().order_by("id").get(pk={some number})。然后默认情况下将其提供给object变量中的模板。

Lots more info on class based views here

作为旁注,您应该在模板中使用{% url %} tag,而不是对网址进行硬编码。