Django/Python:在Django模板中循环选定的表单字段

neu*_*rix 1 forms django templates for-loop

我有一个包含n个字段的表单.前4个字段应该在我的模板中以不同的形式显示.因此,我想知道我是否可以以某种方式循环前4个字段,结束循环并继续在模板中的其余字段上循环.

        <table>
            {% for field in form %}
            {% if forloop.counter == 4 <<< Break here >>>%}
            <tr>
                <td> {{ field.label_tag }} </td>
                <td> {{ field }} </td>
            </tr>
            {% endfor %}
        </table>
        .... Different code ....
        <table>
            {% for field in form %} <<< Continue here >>>
            <tr>
                <td> {{ field.label_tag }} </td>
                <td> {{ field }} </td>
            </tr>
            {% endfor %}
        </table>
Run Code Online (Sandbox Code Playgroud)

我找到了这段代码,但我想知道我是否能够以不同的方式构建模板,或者我是否错过了Django 1.3中允许现在断开循环的一些新变化.

通常情况下,我会将表单分成两个单独的表单,但我想在其他模板中重用表单定义,因此我希望将所有信息保存在一个表单中.

感谢您的意见!

Yuj*_*ita 8

它与其他"无法在模板中执行"问题的解决方案相同:在视图中执行此操作.我真的相信增加的复杂性和逻辑进一步分离到多个代码区域(标签,新文件等)只会损害可维护性.只有当事情确实变得重复,不可读等时,我才会分开/实施DRY.

其他一切都是过早的优化.

Django在提交表单时不会知道差异.

fields = list(form)    
part1, part2 = fields[:4], fields[4:]


{% for field in part1 %}{{ field }}{% endfor %}
...
{% for field in part2 %}{{ field }}{% endfor %}
Run Code Online (Sandbox Code Playgroud)