0

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

第一类

表格 1

表格 2

第 2 类

表格 3

但我实际上得到的是:

第一类

表格 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>
4

2 回答 2

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>

看看外键文档。

还要注意在外部和内部循环中使用相同的变量(c)不是一个好主意,即使它像您的示例一样工作

在 python 中,变量名通常写成小写

from django.shortcuts import render

def homepage (request):
    categories = Category.objects.all()
    return render(request, 'forms/home.html', 
       {'categories': categories})
于 2012-12-18T10:51:56.670 回答
1

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

使用重组的另一个优点是,只涉及一个 sql 调用。如果您有许多类别,这可能是一个问题。

于 2012-12-18T10:45:10.453 回答