【问题标题】:Django: display text between form fieldsDjango:在表单字段之间显示文本
【发布时间】:2011-11-08 07:40:32
【问题描述】:

你好 Stackoverflow 的人,

我正在通过循环显示一个大表格:

    <table>
    {% for field in projectDetailForm %}
    <tr>
        <td> {{ field.label_tag }} </td>
        <td> {{ field }} </td>
    </tr>
    {% endfor %}
    </table>  

我想在几个表单域之后用表单域打断表格以显示更多解释。由于表单相当大(20 个字段),我想避免每个表单字段的“手动显示”(如 here 所述)。

有没有办法在循环中显示文本表单,无论是在第 x 次循环之后还是在特定表单域之后?

感谢您的建议!

【问题讨论】:

    标签: django forms loops field


    【解决方案1】:

    您可以使用 {{ forloop.counter }}{{ forloop.counter0 }}(分别为 1 索引和 0 索引)。

    有关更多信息,请查看此Djangobook 链接。

    【讨论】:

    • 例如:{% ifequal forloop.counter 3 %} &lt;extra stuff&gt; {% endifequal %}.
    • 您的示例仅适用于前三个文件,而不适用于每三个文件。
    • 引用问题:either after the x-th loop
    • 如果应该在特定字段之后注入会是什么样子? {% ifequal field.label == 'email' %} &lt;add text here&gt; {% endifequal %} 好像不行。
    【解决方案2】:

    我会使用forloop.counter 或在表单初始化时在表单字段上设置自定义属性,并以与显示field.label_tag 相同的方式显示该属性

    【讨论】:

      【解决方案3】:

      您可以在表单中添加一个方法,该方法将按部分返回字段。比如:

      def by_5(self):
          iterable = iter(self)
          zipped = zip(*([iterable] * 5)) # replace 5 by desired n
          for z in zipped:
              yield z
          remained = list(iterable)
          if remained:
              yield remained
      

      然后在模板中:

      <table>
      {% for fields in projectDetailForm.by_5 %}
          {% for field in fields %}
          <tr>
              <td> {{ field.label_tag }} </td>
              <td> {{ field }} </td>
          </tr> 
          {% endfor %}
          <tr><td colspan="2">Hi there!</td></tr>
      {% endfor %}
      </table>  
      

      【讨论】:

        猜你喜欢
        • 2017-07-30
        • 2012-01-02
        • 2021-11-10
        • 2017-07-29
        • 2020-10-24
        • 1970-01-01
        • 2016-02-24
        • 1970-01-01
        相关资源
        最近更新 更多