迭代Django formset时显示其他数据

时间:2010-06-06 17:43:21

标签: python django django-forms

我有一份足球比赛清单,我想要显示表格。该列表来自远程源。

matches = ["A vs. B", "C vs. D", "E vs, F"]
matchFormset = formset_factory(MatchForm,extra=len(matches))
formset = MatchFormset()

在模板方面,我想显示带有相应标题的formset(即“A vs. B”)。

{% for form in formset.forms %}
    <fieldset>
        <legend>{{TITLE}}</legend>
        {{form.team1}} : {{form.team2}}
    </fieldset>
{% endfor %}

现在如何让TITLE包含当前表单的正确标题?或者以不同的方式询问:如何使用与matches上的迭代相同的索引迭代formset.forms

感谢您的投入!

2 个答案:

答案 0 :(得分:6)

我相信在Django模板语言中没有用于索引的内置过滤器,但是有一个用于切片(slice) - 因此我认为,在紧要关头,你可以使用单项切片(包含forloop.counter0:forloop.counter)和.first可提取您想要的值。

当然,通过Python方面的一些合作来实现它会更容易 - 你可以在Python代码中将上下文变量forms_and_matches设置为zip(formset.forms, matches),并且在模板中,{% for form, match in forms_and_matches %}简单而可读地获取这两个项目(当然,假设Django 1.0或更好,在整个答案中)。

答案 1 :(得分:2)

这是Alex回答的补充。

在我对Alex的回答发表评论之后,我做了一些阅读,并发现将管理表单(基本上是一个包含有关表单集中有多少表单的信息的元表单)放入模板中以提交数据非常重要被视为一种形式,而不仅仅是一堆形式。 Documentation here

我知道将其纳入模板的唯一两种方法是:

  1. 除了您制作的数据结构外,还发送formset, 然后使用{{my_formset.management_form}}
  2. 呈现管理表单
  3. 在视图中呈现管理表单,并将其作为项目发送到您的模板
  4. 当然,如果您使用Alex的第一种方法,则表单集已经可用,因此您可以直接添加管理表单。