想象一下以下用例:我有一个报告模板字典。每个报告模板都有一个ID和一个名称。看起来或多或少是这样的:
reports = [ { 'ID' : 'A1',
'NAME' : 'special report 1 for department A',
... (other fields irrelevant to the question's matter)
},
{ 'ID' : 'X9',
'NAME' : 'special report 9 for department X',
... (other fields irrelevant to the question's matter)
},
]
报告的访问和可见性将存储在数据库中 我创建了一个表单,其字段名称等于报告的ID。一切顺利,直到我必须在模板中显示表单。我不知道如何访问正确的表单字段。此语法不起作用:
{% for report in reports %}
<tr>
<td>{{ report.ID }}</td>
<td>{{ report.NAME }}</td>
<td>{{ form.report.ID }}</td>
</tr>
{% endfor %}
此外:
{% for report in reports %}
<tr>
<td>{{ report.ID }}</td>
<td>{{ report.NAME }}</td>
{% with report.ID as key %}
<td>{{ form.key }}</td>
{% endwith %}
</tr>
{% endfor %}
不起作用。
语法应如何?应该放置什么而不是下面代码中的问号?
{% for report in reports %}
<tr>
<td>{{ report.ID }}</td>
<td>{{ report.NAME }}</td>
<td>{{ form.??? }}</td>
</tr>
{% endfor %}
我越过这个解决方案:Django Templates: Form field name as variable?我想如果没有其他方法可以解决我的问题,我将不得不使用它。
答案 0 :(得分:4)
不鼓励这样做,因为模板应该尽可能没有逻辑。但是,在实践中,这种情况一直都会出现。您可以制作模板过滤器来执行此操作:
@register.filter(name='get')
def get(o, index):
try:
return o[index]
except:
return settings.TEMPLATE_STRING_IF_INVALID
然后,在模板中,在适当加载templatetags库之后:
{% for report in reports %}
<tr>
...
<td>{{ form|get:report.ID }}</td>
</tr>
{% endfor %}
答案 1 :(得分:0)
试试这个:
{{ form.fields.key }}