我有一個很棒的小部件來顯示信息,我想在模板中使用它,但不使用窗體。django模板中的渲染小部件
我的模板只用於顯示信息,沒有任何表單需要提交。如何在不使用表單的情況下在模板中呈現此小部件。我必須考慮到這個小部件提供了一些用戶數據。我可以使用模板標籤嗎?
謝謝!
我有一個很棒的小部件來顯示信息,我想在模板中使用它,但不使用窗體。django模板中的渲染小部件
我的模板只用於顯示信息,沒有任何表單需要提交。如何在不使用表單的情況下在模板中呈現此小部件。我必須考慮到這個小部件提供了一些用戶數據。我可以使用模板標籤嗎?
謝謝!
在自定義Widget類中實現小部件的render
方法。
render(self, name, value, attrs=None)
render方法負責窗口小部件的html表示。 E.g渲染的TextInput
返回這片HTML的方法:
>>> name = forms.TextInput(attrs={'size': 10, 'title': 'Your name',})
>>> name.render('name', 'A name')
u'<input title="Your name" type="text" name="name" value="A name" size="10"/>'
可以渲染方法的返回值,然後添加到視圖的上下文。
def my_view(request):
widget_html = MyCustomWidget.render(...)
return render_to_response(..., {'widget_html': widget_html})
現在,您可以使用您的模板顯示部件:
{{ widget_html }}
你也可以寫一個templatetag作爲@ablm建議。
我會不使用窗體的一般方法是不使用應該在窗體中的對象。本質上,我會創建一個帶有我的小部件的HTML代碼的django模板,以及一個Mixin(正如我通常試圖僅使用基於類的視圖)或一個將爲該小部件生成正確的上下文參數的函數。
這使HTML與HTML保持一致,邏輯與邏輯保持一致。如果它僅用於顯示信息,則不必是一個小部件。
無論你想要哪個小部件,都要確保在你的視圖中調用(功能)或混入(基於類),以及小部件模板{%include%},並讓模板渲染器完成工作。
也許調用widget.render方法?它是否存在! – ablm
我怎樣才能在模板中調用渲染方法? – danielrvt
先檢查一下是否存在該方法。如果你想在模板中調用它,你必須製作一個模板標籤。 – ablm