我在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模板?
答案 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,而不是对网址进行硬编码。