在遍历Django表单集时显示附加数据
我有一份足球比赛的列表,想要显示一些表单。这份列表来自一个远程的地方。
matches = ["A vs. B", "C vs. D", "E vs, F"]
matchFormset = formset_factory(MatchForm,extra=len(matches))
formset = MatchFormset()
在模板那边,我想把表单集合显示出来,并且要有对应的标题(比如“球队A对球队B”)。
{% for form in formset.forms %}
<fieldset>
<legend>{{TITLE}}</legend>
{{form.team1}} : {{form.team2}}
</fieldset>
{% endfor %}
那么我该怎么让 TITLE
包含当前表单的正确标题呢?换句话说,我该如何在遍历 formset.forms
的同时,也能用相同的索引去遍历 matches
呢?
谢谢你的帮助!
2 个回答
2
这是对Alex回答的补充。
在我对Alex的回答评论后,我做了一些阅读,发现把管理表单(其实就是一个包含了关于表单组中有多少个表单的信息的元表单)放到你的模板里是很重要的。这样你提交的数据才会被当作一个表单组来处理,而不是一堆散乱的表单。这里有相关文档。
我知道的将管理表单放入模板的两种方法是:
- 除了你创建的数据结构外,还要发送表单组,然后用 {{ my_formset.management_form }} 来渲染管理表单。
- 在你的视图中渲染管理表单,并将其作为一个项目发送到模板。
当然,如果你使用Alex的第一种方法,表单组已经可用了,所以你可以直接添加管理表单。
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或更高版本)。