2011-02-10 8 views
2

テンプレートに指定されたhtml属性を使用してフォーム要素を描画するためのカスタムテンプレートタグを作成しました。私がしたいのは、辞書に自分のタグに辞書を渡すだけです。Django - 辞書をテンプレートタグに渡す方法

{{ form.openid_identifier|htmlattributes:{'class' : 'something', 'id': 'openid_identifier'} }} 

テンプレートにこれを書く方法はありますか?

答えて

3

まず、カスタムタグではなくカスタムフィルタの構文を指定します。私はあなたがカスタムフィルターを言うことを前提にして質問に答えるつもりです。

第2に、辞書をフィルタ(またはテンプレートタグ)に明示的に渡すことはできません。中かっこ、かっこ、およびかっこは、{% %}の文字として使用することはできず、テンプレートの解析時に構文エラーが発生します。カスタムフィルタだろう、この場合、

{{ form.openid_identifier|htmlattributes:"{'class' : 'something', 'id': 'openid_identifier'}" }} 

しかし、テンプレートタグの中にそれを解析その後、辞書のように見える文字列を渡すと、例えばからあなたを停止することは何も、ありませんこれを辞書として正しく解析する必要があります。

なぜ使用しているソリューションを使用しているのかを知ることは役に立ちます。私は通常、フォームクラス内のフォームオブジェクト(通常forms.py)からクラスを設定します。あなたが質問にタグをより正確に制御を望んでいた場合は、単に先に行くと、それを綴る:

<input type="text" name="openid_identifier" id="openid_identifier" class="something" /> 
+0

私はあなたの[非常に関連する質問](http://stackoverflow.com/questions/4951810/django-how-to-add-html-attributes-to-forms-on-templates)を見ました。フォームクラスの使用に興味がない理由を答えます。その場合、手動でHTMLを書き出すことは、私の意見では、フィルタを使用するよりも、より良く、より明確に、簡潔になります。 –

+0

辞書のように見える文字列を解析することは、私にとって最も簡単な解決策でした。 – Raphael

0

真takes_context =することで、あなたがビューから必要なデータを渡します。

関連する問題