Django模板-如何在给定索引号(由迭代器生成)的情况下访问表单(上下文)中的表单]]

问题描述 投票:0回答:1

我有两种形式-源形式和结果形式。

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 django-templates formset
1个回答
1
投票

Django模板引擎根据设计

© www.soinside.com 2019 - 2024. All rights reserved.