假设在views.py中,我的上下文中有多种变量(即,正在更改)多种形式或类型的对象。 (为简单起见,我仅使用“表格”一词)。
context = {
'form_0': form_0,
'form_1': form_1,
'form_2': form_2,
'form_3': form_3,
# ... and so forth
}
让我们假设我无法在任何给定时间知道上下文中有多少种形式。是否可以对模板标签执行以下操作:
{% for i in (number of forms in context) %}
{{ form_i }} <-- where i is equal to the number i in the loop -->
{% endfor %}
最终结果将转换为:
{{ form_0 }}
{{ form_1 }}
{{ form_2 }}
... and so forth
我怀疑这是否可能,但如果可以,我会发现它很有帮助。
答案 0 :(得分:0)
按名称引用,就像构造包含名称的字符串一样,通常被认为是一种不安全方法:比人们想象的更难创建一种正确构造名称的算法。再说一遍,然后再删除form_3
,那么您的算法可能会在2
处停止,但是也许那里还有其他形式,但是您忘记了获取这些形式的算法。
最好在此传递对象的集合,例如 list :
context = {
'forms': [form_0, form_1, form_2, form_3]
}
然后我们可以在模板中使用以下内容呈现
:{% for form_i in forms %}
{{ form_i }}
{% endfor %}
如果您因此在列表中添加了额外的表单,则该表单将成为模板迭代的一部分,因此Django将呈现该表单(或您在列表中输入的任何内容)。
如果您还需要访问某些特定表格,则也可以通过另一个名称,例如:
context = {
'forms': [form_0, form_1, form_2, form_3],
# if we need specific items of form_2 in the template,
# we can pass it under a specific name as well
'form_2': form_2
}
所以现在我们都可以枚举forms
来呈现它们,但是如果form_2
有一些我们也需要在模板中处理的有趣数据,我们仍然可以使用{{ form_2.non_field_errors }}
例如。