我有以下型号:
class UserProfile(...):
...
photo1 = models.URLField()
photo2 = models.URLField()
photo3 = models.URLField()
photo4 = models.URLField()
photo5 = models.URLField()
在创建/更新模板中,我必须为div
向file1
写下以下file5
的五份副本:
<div>
Photo 1:
{% if userProfileForm.instance.file1 %}
<a href="{{ userProfileForm.instance.file1 }}" target=_blank>View</a>
{% endif %}
<input type=file name=file1>
{% if userProfileForm.instance.file1 %}
<a href="{% url 'account:deletePhoto' userProfileForm.instance.id %}">Delete</a>
{% endif %}
</div>
有没有办法迭代字段file<i>
?
{% for i in '12345' %}
<div>
Photo {{ forloop.counter }}:
...
</div>
{% endfor %}
答案 0 :(得分:1)
使用示例更新
让我展示一下如何解决问题:
desired_fields = []
for field in UserProfile._meta.get_fields()
if "photo" in field.name:
desired_fields.append(field.name)
context.update(fields=desired_fields) # pass it in the context
此时您将拥有所需的字段,这些字段应与模板中的for循环一起使用。还有一件事,你需要添加一些模板标签来从字符串表示中获取真实字段:
# custom template tag
def from_string_to_field(instance, field_str):
return getattr(instance, field_str, None)
在模板代码中看起来像这样
{% for field in fields %}
{{userProfileForm.instance|from_string_to_field:"field"}}
{% endfor %}