テンプレートに指定されたhtml属性を使用してフォーム要素を描画するためのカスタムテンプレートタグを作成しました。私がしたいのは、辞書に自分のタグに辞書を渡すだけです。Django - 辞書をテンプレートタグに渡す方法
{{ form.openid_identifier|htmlattributes:{'class' : 'something', 'id': 'openid_identifier'} }}
テンプレートにこれを書く方法はありますか?
テンプレートに指定されたhtml属性を使用してフォーム要素を描画するためのカスタムテンプレートタグを作成しました。私がしたいのは、辞書に自分のタグに辞書を渡すだけです。Django - 辞書をテンプレートタグに渡す方法
{{ form.openid_identifier|htmlattributes:{'class' : 'something', 'id': 'openid_identifier'} }}
テンプレートにこれを書く方法はありますか?
まず、カスタムタグではなくカスタムフィルタの構文を指定します。私はあなたがカスタムフィルターを言うことを前提にして質問に答えるつもりです。
第2に、辞書をフィルタ(またはテンプレートタグ)に明示的に渡すことはできません。中かっこ、かっこ、およびかっこは、{% %}
の文字として使用することはできず、テンプレートの解析時に構文エラーが発生します。カスタムフィルタだろう、この場合、
{{ form.openid_identifier|htmlattributes:"{'class' : 'something', 'id': 'openid_identifier'}" }}
:
しかし、テンプレートタグの中にそれを解析その後、辞書のように見える文字列を渡すと、例えばからあなたを停止することは何も、ありませんこれを辞書として正しく解析する必要があります。
なぜ使用しているソリューションを使用しているのかを知ることは役に立ちます。私は通常、フォームクラス内のフォームオブジェクト(通常forms.py
)からクラスを設定します。あなたが質問にタグをより正確に制御を望んでいた場合は、単に先に行くと、それを綴る:
<input type="text" name="openid_identifier" id="openid_identifier" class="something" />
真takes_context =することで、あなたがビューから必要なデータを渡します。
私はあなたの[非常に関連する質問](http://stackoverflow.com/questions/4951810/django-how-to-add-html-attributes-to-forms-on-templates)を見ました。フォームクラスの使用に興味がない理由を答えます。その場合、手動でHTMLを書き出すことは、私の意見では、フィルタを使用するよりも、より良く、より明確に、簡潔になります。 –
辞書のように見える文字列を解析することは、私にとって最も簡単な解決策でした。 – Raphael