2011-02-10 49 views
2

我創建了一個自定義模板標記,用於使用模板上指定的html屬性呈現我的表單元素。我想要做的就是將字典傳遞給我的標籤,如下所示:Django - 如何將字典傳遞給模板標記

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

有什麼辦法在模板上寫這樣的東西嗎?

回答

3

首先,您給定義過濾器的語法,而不是自定義標記。假設你打算說自定義過濾器,我會回答這個問題。其次,你不能明確地將字典傳遞給過濾器(或者模板標籤,就此而言)。括號,括號和括號不允許作爲{% %}中的字符,並且在解析模板時將導致語法錯誤。

然而,有什麼可阻止你,例如,傳遞,看起來像一本字典的字符串,然後在模板標籤中對它進行分析:

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

在這種情況下,你的定製過濾器需要正確解析這個字典。

瞭解您爲什麼使用您正在使用的解決方案可能會有幫助。我通常在窗體類中設置Form對象的類(通常在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在我看來,比使用過濾器更好,更清晰,更簡潔。 – 2011-02-10 02:55:22

0

通過takes_context = True和你擦肩而過從視圖所需要的數據。

相關問題