【问题标题】:Display additional data while iterating over a Django formset在迭代 Django 表单集时显示附加数据
【发布时间】:2010-06-06 17:43:20
【问题描述】:

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

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

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

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

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

感谢您的意见!

【问题讨论】:

    标签: python django django-forms


    【解决方案1】:

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

    当然,在 Python 方面进行一些合作会更容易——您可以在 Python 代码中将上下文变量 forms_and_matches 设置为 zip(formset.forms, matches),并在模板中设置 {% for form, match in forms_and_matches %}简单易读地了解这两个项目(当然,假设整个答案中使用 Django 1.0 或更高版本)。

    【讨论】:

    • 非常感谢,亚历克斯。压缩是一个如此美丽而简单的解决方案!
    • 家里有人抓住了这个......我希望使用完全相同的东西,但这(从表单集中提取表单)不会丢失表单集管理器(关于表单数量的元信息,初始表单,也许更多)包含在表单集容器中?那么在读取 POST 数据的时候,就不知道要加载多少表单了..?
    【解决方案2】:

    这是对 Alex 答案的补充。

    在对亚历克斯的回答发表评论后,我做了一些阅读,发现将管理表单(基本上是一个元表单,其中包含有关表单集中有多少表单的信息)放入您的模板中以使您提交的数据成为重要的被视为一个表单集,而不仅仅是一堆表单。 Documentation here.

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

    1. 除了您创建的任何数据结构外,还发送表单集, 然后使用 {{ my_formset.management_form }}
    2. 呈现管理表单
    3. 在您的视图中呈现管理表单并将其作为项目发送到您的模板

    当然如果你使用Alex的第一种方式,formset已经可用,你可以直接添加管理表单。

    【讨论】:

      猜你喜欢
      • 2023-01-16
      • 2015-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-13
      • 2014-01-13
      • 2020-07-26
      • 1970-01-01
      相关资源
      最近更新 更多