我有两种形式-源形式和结果形式。
Forms.py
class SourceForm(forms.Form): some_source_field = forms.forms.CharField(...) class ResultForm(forms.Form): some_result_field = forms.forms.CharField(...)
我的视图使用
formset_factory
渲染每个实例的两个实例,并将其传递给模板,该实例具有与要渲染多少表格相匹配的数字范围。
Views.py
class MyView(Vew): def get(self, request): forms_to_render = 2 SourceFormSet = formset_factory(SourceForm, extra=forms_to_render) ResultFormSet = formset_factory(ResultForm, extra=forms_to_render) context = { 'source_forms': SourceFormSet, 'result_forms': ResultFormSet, 'init': range(0, forms_to_render), }
在我的模板中,我要为给定范围内的每个数字(在这种情况下为2)生成一个容纳source_form和result_form的容器,如下所示。
template.html
{% for i in init %} <div class="container-fluid" id="primary_container_{{ i }}"> {{ source_forms.i }} {{ result_forms.i }} </div> {% endfor %}
背景:我有一个javascript队列,可一次取消隐藏一个
primary_container
来进行处理;当用户处理队列中的下一个表单集时,我将“经过处理的”容器隐藏起来并在后台填充它。目的是最大程度地减少表单填充时的等待时间。
如果我将索引值硬编码为0或1,则将呈现该表格。
{{ source_forms.0 }} <!-- works fine --> {{ source_forms.1 }} <!-- works fine -->
但是,这不起作用
{% for i in init %} {{ source_forms.i }} <!-- doesn't render form --> {% endfor %}
我以为
i
可能不再是正确的数据类型,所以我尝试了此操作,但这也不起作用
{% for i in init %} {% with forloop.counter0 as x %} {{ source_forms.x }} <!-- doesn't render form --> {% endwith %} {% endfor %}
我通过执行此操作使其工作:
{% for i in init %} {% for form in source_forms %} {% if forloop.counter0 == i %} {{ form }} <!-- renders form --> {% endif %} {% endfor %} {% endfor %}
但是在给定索引
form
的情况下,有没有更简单的方法在forms
中获得正确的i
?
我有两种形式-源形式和结果形式。 Forms.py类SourceForm(forms.Form):some_source_field = forms.forms.CharField(...)类ResultForm(forms.Form):some_result_field = ...
Django模板引擎根据设计