Django模板:如何访问等于变量值的表单字段?

Django模板:如何访问等于变量值的表单字段?,django,django-templates,Django,Django Templates,设想以下用例:我有一个报告模板字典。每个报表模板都有一个ID和一个名称。它看起来或多或少像这样: reports = [ { 'ID' : 'A1', 'NAME' : 'special report 1 for department A', ... (other fields irrelevant to the question's matter) }, { 'ID' : 'X9',

设想以下用例:我有一个报告模板字典。每个报表模板都有一个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 %} 
{%用于报告中的报告%}
{{report.ID}
{{report.NAME}
{{form.report.ID}
{%endfor%}
此外:

{%用于报告中的报告%}
{{report.ID}
{{report.NAME}
{%以report.ID作为键%}
{{form.key}}
{%endwith%}
{%endfor%}
不起作用

语法应该是什么样子?在下面的代码中应该用什么代替问号

{% for report in reports %}
<tr>
    <td>{{ report.ID }}</td>
    <td>{{ report.NAME }}</td>

    <td>{{ form.??? }}</td>

</tr>
{% endfor %} 
{%用于报告中的报告%}
{{report.ID}
{{report.NAME}
{{形式.??}
{%endfor%}
我偶然发现了这个解决方案:如果没有其他方法来解决我的问题,我想我将不得不使用它

试试这个:

{{ form.fields.key }}

不鼓励这样做,因为模板应该尽可能没有逻辑。但是,在实践中,这种情况经常出现。您可以制作一个模板过滤器,用于执行以下操作:

@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 %} 
{%用于报告中的报告%}
...
{{form | get:report.ID}
{%endfor%}

我尝试了{%with report.ID作为key%}{{form.fields.key}{%endwith%}和{{form.fields.report.ID}。两者都不起作用:/噢,对了,你的“键”是一个变量,不是一个符号。不幸的是,在这种情况下,您将不得不创建自己的模板标记或过滤器。这将是一种可怕的过度操作:/另一方面,在模板中像这样操作表单似乎效率不高。也许描述一下你想要完成的任务?想象一组对象。每个都有自己的业务逻辑。它们存储在字典中,并通过唯一的ID进行区分。用户可以访问全部,部分或全部。我正在编写一个在数据库中存储以下数据的工具:“授予用户报告访问权限/拒绝访问”。它成功了。它不能解决这个问题(基本上你不能像我计划的那样访问字段),但是自定义过滤器做类似的工作。萨克斯!
{% for report in reports %}
<tr>
    ...
    <td>{{ form|get:report.ID }}</td>
</tr>
{% endfor %}