django中避免两个forloop的有效方法

django中避免两个forloop的有效方法,django,django-templates,Django,Django Templates,在django有更好或更有效的方法吗 {% for list1item in list1 %} {% for list2item in list2 %} {% if forloop.counter == forloop.parentloop.counter %} {{ list1item }} {{ list2item }} {% endif %} {% endfor %} {% endfor %} 我想做这样的事,但不工作 {% for

在django有更好或更有效的方法吗

{% for list1item in list1 %}
   {% for list2item in list2 %}
      {% if forloop.counter == forloop.parentloop.counter %}
          {{ list1item }} {{ list2item }}
      {% endif %}
   {% endfor %}
{% endfor %}
我想做这样的事,但不工作

{% for list1item in list1 %}
   {% with forloop.counter as i %}
      {{ list2.i }}
   {% endwith %}
{% endfor %}
更新!事实就是这样 这是我的表单。py

from django import forms
from .models import MedicalRecords

class UpdateMedicalRecordForm(forms.ModelForm):
    class Meta:
        model = MedicalRecords
        fields = ("title", "file", "doctor")

        widgets = {
            "title": forms.Textarea(attrs={"rows": "", "class": "form-control"}),
        }

我需要每个medicalrecord表单及其实例的列表,因此我使用
[UpdateMedicalRecordForm(instance=x)for x in medicalrecords]
为每个medicalrecord创建表单。 我的视图.py如下

...
medicalrecords = get_list_or_404(MedicalRecords,somefilterings..)
forms = [UpdateMedicalRecordForm(instance=x) for x in medicalrecords]
...
然后在模板中访问我正在使用的每种形式的病历

<form method="POST" enctype="" class="">
        <div class="modal-body">
          <div class="form-group">
            {% csrf_token %}
            {% for form in forms reversed %}
              {% if forloop.counter == forloop.parentloop.counter %}
                {{ form.as_p }}
              {% endif %}
            {% endfor %}
          </div>
          <div class="submit-section text-center">
            <button type="submit" class="btn btn-primary submit-btn">Submit</button>
            <button type="button" class="btn btn-secondary submit-btn" data-dismiss="modal">Cancel</button>
          </div>
        </div>
      </form>

{%csrf_令牌%}
{表单中的表单为%}
{%if-forloop.counter==forloop.parentloop.counter%}
{{form.as_p}}
{%endif%}
{%endfor%}
提交
取消
实际上,为了使您的解决方案正常工作,您可以:

# templatetags/custom_tags.py

from django import template

register = template.Library()

@register.filter
def get_index(obj, index):
    """
    Try to get value from a list object with an index given in parameter.
    Return an empty string if index doesn't exist
    """
    try:
        return obj[index]
    except IndexError:
        return ""
然后在模板中,您可以执行以下操作:

{% load custom_tags %}

{% for list1item in list1 %}
    {{ list2|get_index:forloop.counter }}
{% endfor %}

<> P>但是在阅读了你的更新之后,我相信你可以为你的用例找到更干净的东西。

你有没有考虑过在你的观点中做这个逻辑,然后在上下文中只传递你感兴趣的值?你会显示结果(你需要达到什么),所以很容易说出来。嘿,谢谢你的回放,我更新并解释了我真正在做什么。:)@AliAref为什么不简单地使用
form.instance
来获取模型的实例?不需要所有这些循环/索引。有很多医疗记录,所以我通过
[UpdateMedicalRecordForm(instance=x)for x in medicalrecords]
获取实例,并将其存储在表单中,然后循环表单。。这样我就可以在模板上编辑每个。。我将所有medicalrecords实例都放在一个表中。。我是django的新手,所以不知道该怎么办。是的,谢谢你,先生,它正在工作:)