4

次のユース ケースを想像してください。レポート テンプレートのディクショナリがあります。各レポート テンプレートには、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? 私の問題を解決する方法が他にない場合は、それを使用する必要があると思います。

4

2 に答える 2

5

テンプレートは可能な限りロジックがないはずなので、お勧めしません。しかし、実際には、これは常に発生します。これを行うテンプレートフィルターを作成できます。

@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 %} 
于 2012-09-06T20:16:17.753 に答える
0

これを試して:

{{ form.fields.key }}
于 2012-07-17T16:09:10.337 に答える