我试图在我的应用程序中创建一个包含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>
答案 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调用。如果您有许多类别,这可能是一个问题。