基于django类的视图,用于所有类别和所有实体
我已经试了几个小时了,看了很多文档,但是我不能正确地理解它。我不认为我会很快找到解决这个问题的办法,所以也许有人会发现问题出在哪里 我想要一个视图来显示我的所有类别以及所有与这些类别相关的条目 我试着遵循这个例子: 但我得到了这个错误:元组索引超出范围 我的模型:基于django类的视图,用于所有类别和所有实体,django,django-class-based-views,Django,Django Class Based Views,我已经试了几个小时了,看了很多文档,但是我不能正确地理解它。我不认为我会很快找到解决这个问题的办法,所以也许有人会发现问题出在哪里 我想要一个视图来显示我的所有类别以及所有与这些类别相关的条目 我试着遵循这个例子: 但我得到了这个错误:元组索引超出范围 我的模型: STATUS_CHOICES = ( ('d', 'Draft'), ('p', 'Published'), ('w', 'Whitdrawn'), ) class PublishedManager(mode
STATUS_CHOICES = (
('d', 'Draft'),
('p', 'Published'),
('w', 'Whitdrawn'),
)
class PublishedManager(models.Manager):
use_for_related_fields = True
def get_query_set(self):
return super(PublishedManager, self).get_query_set().filter(status='p')
class Category(models.Model):
name = models.CharField()
slug = models.SlugField()
status = models.CharField(max_length=1, default='d', choices=STATUS_CHOICES)
published = PublishedManager()
class Entry(models.Model):
name = models.CharField()
slug = models.SlugField()
category = models.ForeignKey(Category)
status = models.CharField(max_length=1, default='d', choices=STATUS_CHOICES)
published = PublishedManager()
我的网址
#View for all categories and all connected entries
url(r'^blog/$', AllCategories.as_view()),
#View for one category - and all the connected entries
url(r'^blog/(?P<slug>[-\w]+)/$', CategoryList.as_view()),
非常感谢您的帮助
编辑:
添加了我的自定义管理器。
我只有在模板中没有显示未发布的实体以列出all我的类别和all其连接的实体时遇到问题,如:
- 第一类
- 已发表的条目1
- 已发表的条目3
- 第2类
- 已发表的条目7
- 已发表的条目9
{%for category.entry\u set.all%}出现此错误是因为包含所有位置参数的元组的
self.args
是空的,因为您没有在URL中指定组,并且试图获取空元组的第一个元素(self.args[0]
)
将您的url更改为:url(r'^blog/(\w+/$),CategoryList.as_view())
,
为了能够使用self.args[0]
从以下位置复制:
这项工作的关键在于
调用基于类的视图时,会存储各种有用的内容
自己除了请求(self.request)之外,还包括
捕获的位置(self.args)和基于名称(self.kwargs)参数
根据URLconf
除此之外,我看不到您的代码中有任何其他错误。根据您的评论,如果您只是想用相关条目显示所有类别,那么您需要做的就是用相关条目获取所有类别
def query_set(self):
return Category.objects.all()
然后在模板中,只需在类别上循环,并嵌套循环条目
{% for category in object_list %}
<ul>
<li>{{ category.name }}</li>
{% for entry in category.entry_set.all %}
<li>{{ entry }}</li>
{% endfor %}
</ul>
{% endfor %}
{%用于对象列表%中的类别]
- {{category.name}
{category.entry_set.all%}
- {{entry}}
{%endfor%}
{%endfor%}
您可以使用_set.all,我的代码:
views.py
class Categories(models.Model):
model = Category
template_name = "#..."
paginate_by = #...
template
Categories list:
{% for category in object_list %}
Name: {{ category }}
{% for entry in category.entry_set.all|slice:":2" %}
{{ entry }}
{% empty %}
None
{% endfor %}
{% endfor %}
是的,这就解决了。现在,我的/blog/category_slug/works页面开始工作。我得到一个包含所有连接项的列表。但如果我想列出我所有的类别,我该怎么办?在同一页上,列出与每个类别相关的所有条目?像
- 第1类
- 条目1
- 条目4
- 第2类
- 条目8
views.py
class Categories(models.Model):
model = Category
template_name = "#..."
paginate_by = #...
template
Categories list:
{% for category in object_list %}
Name: {{ category }}
{% for entry in category.entry_set.all|slice:":2" %}
{{ entry }}
{% empty %}
None
{% endfor %}
{% endfor %}