django中避免两个forloop的有效方法
在django有更好或更有效的方法吗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
{% 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的新手,所以不知道该怎么办。是的,谢谢你,先生,它正在工作:)