我創建了一個自定義模板標記,用於使用模板上指定的html屬性呈現我的表單元素。我想要做的就是將字典傳遞給我的標籤,如下所示:Django - 如何將字典傳遞給模板標記
{{ form.openid_identifier|htmlattributes:{'class' : 'something', 'id': 'openid_identifier'} }}
有什麼辦法在模板上寫這樣的東西嗎?
我創建了一個自定義模板標記,用於使用模板上指定的html屬性呈現我的表單元素。我想要做的就是將字典傳遞給我的標籤,如下所示:Django - 如何將字典傳遞給模板標記
{{ form.openid_identifier|htmlattributes:{'class' : 'something', 'id': 'openid_identifier'} }}
有什麼辦法在模板上寫這樣的東西嗎?
首先,您給定義過濾器的語法,而不是自定義標記。假設你打算說自定義過濾器,我會回答這個問題。其次,你不能明確地將字典傳遞給過濾器(或者模板標籤,就此而言)。括號,括號和括號不允許作爲{% %}
中的字符,並且在解析模板時將導致語法錯誤。
然而,有什麼可阻止你,例如,傳遞,看起來像一本字典的字符串,然後在模板標籤中對它進行分析:
{{ form.openid_identifier|htmlattributes:"{'class' : 'something', 'id': 'openid_identifier'}" }}
在這種情況下,你的定製過濾器需要正確解析這個字典。
瞭解您爲什麼使用您正在使用的解決方案可能會有幫助。我通常在窗體類中設置Form對象的類(通常在forms.py
)。或者,如果你想在對有關的標籤更精確的控制,先走一步,拼出來:
<input type="text" name="openid_identifier" id="openid_identifier" class="something" />
通過takes_context = True和你擦肩而過從視圖所需要的數據。
我只是看着你的[非常相關的問題](http://stackoverflow.com/questions/4951810/django-how-to-add-html-attributes-to-forms-on-templates),所以我想回答你爲什麼不對使用表單類感興趣。在這種情況下,手動寫出HTML在我看來,比使用過濾器更好,更清晰,更簡潔。 – 2011-02-10 02:55:22