Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于django类的视图,用于所有类别和所有实体_Django_Django Class Based Views - Fatal编程技术网

基于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
哇,我一直在想复杂的方法!非常感谢。现在,一个新问题。如何将我的自定义管理器与此配合使用?我有一个名为“PublishedManager”的管理器,我的模型上有“published=PublishedManager()”。如何在我的模板中使用此管理器?Category.published.all()…查看django书籍的模型和高级模型部分了解更多信息是的,我的视图中有queryset=Package.published.all(),但当我这样做时:{Category.entry\u set.all%}在我的模板中,我仍然会得到一个未发布条目的列表(我在我的输入模型和分类模型上使用相同的管理者)发布模型管理者的代码…如果代码很长,则只需编辑到您的问题中(如果可能)抱歉,我现在睡觉了,伙计,但我只是注意到您确实让listview进行了正确的查询,所以问题可能是您的模板代码,可以很容易地解决。我明天会为您或其他人检查。现在我做{%if entry.status==“p”%}在我的模板中,但我认为最好是获得所有已发布条目的正确查询集,我只是不知道如何获得它。是的。结果是这样的。
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 %}