繁体   English   中英

Django模板中的双循环

[英]Double loop in Django template

我已经尝试了几个小时的嵌套循环,但是到目前为止,我的结果都无效。 这是我到目前为止所拥有的:

的index.html

{% for category in categories %}
    <div class="col-md-12 column category list-group">
        <p><b>{{ category.name }}</b></p>
        {% for subcategory in subcategories %}
            <div class="list-group-item">
                <h5 class="mb-1"><a href="{% url 'subcategory_threads' subcategory.id %}">{{ subcategory.name }}</a></h5>
                <small>{{ subcategory.description }}</small>
                <small>{{ subcategory.count_threads }}</small>
            </div>
        {% endfor %}
    </div>
{% endfor %}

views.py

class IndexView(ListView):
template_name = 'myForum/index.html'
context_object_name = 'SubCategory_list'
queryset = SubCategory.objects.all()


def get_context_data(self, **kwargs):
    context = super(IndexView, self).get_context_data(**kwargs)
    context['categories'] = Category.objects.all()
    context['subcategories'] = SubCategory.objects.all()
    return context

models.py

class Category(models.Model):
name = models.CharField(max_length=255)

def __str__(self):
    return self.name


class SubCategory(models.Model):
name = models.CharField(max_length=255)
description = models.CharField(max_length=255)
category = models.ForeignKey('Category', default=0)

def __str__(self):
    return self.name

输出 输出

我的问题是SubCategory-News属于Infromation,类别Off-Topic属于General。 由于某种原因,循环会显示所有子类别,而我不知道如何将其缩小到当前类别。

您可以将内部循环更改为:

{% for subcategory in category.subcategory_set.all %}

这将遍历当前类别的子类别。

由于要在外部循环中遍历类别,因此可以在列表视图中更改查询集以使用Category模型。 您可以通过预取子类别来减少查询数量。

由于列表视图已经使queryset在模板上下文中可用,因此好像也可以删除get_context_data方法。

class IndexView(ListView):
    template_name = 'myForum/index.html'
    context_object_name = 'catrgories'
    queryset = Category.objects.all().prefetch_related('subcategory_set') 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM