如何在循环中执行循环

时间:2012-12-18 10:42:17

标签: python django

我试图在我的应用程序中创建一个包含catagories循环的部分,然后是该类别中的表单。例如,它应该显示如下:

第1类

表1

表格2

第2类

表格3

但实际上得到的是:

第1类

表1

表格2

表格3

第2类

表1

表格2

表格3

我该如何解决这个问题?

我的观点是:

def homepage (request):

Categories = Category.objects.all()
Forms = Form.objects.all()

output = {
    'Category_Name': Categories,
    'Form_Title': Forms,

    }

return render_to_response('forms/home.html', RequestContext(request, output))

我的HTML是:

<ul>{% for c in Category_Name %}<li>{{ c.Name }}<ul>{% for c in Form_Title %}
<li><a href="/forms/{{ c.id }}">{{ c.Title }}</a></li>{% endfor %}</ul></li>{% endfor %}</ul>

2 个答案:

答案 0 :(得分:3)

如果您的表单通过外键与某个类别相关联

class Form(models.Model):
    ...
    category = models.ForeignKey(Category)
你可以这样做:

<ul>
    {% for c in Category_Name %}
    <li>{{ c.Name }}
        <ul>
        {% for form in c.form_set.all %}
        <li><a href="/forms/{{ form.id }}">{{ form.Title }}</a></li>
        {% endfor %}
        </ul>
    </li>
    {% endfor %}
</ul>

看一下foreignkey文档。

同样注意在外部和内部循环中使用相同的变量(c)并不是一个好主意,即使它在你的例子中起作用

并且在python变量名中通常写成小写

from django.shortcuts import render

def homepage (request):
    categories = Category.objects.all()
    return render(request, 'forms/home.html', 
       {'categories': categories})

答案 1 :(得分:1)

此用例有一个重新组合模板标记:https://docs.djangoproject.com/en/1.4/ref/templates/builtins/?from=olddocs#regroup

使用重新组合的另一个好处是,只涉及一个SQL调用。如果您有许多类别,这可能是一个问题。