2012-08-30 127 views
2

我有一個很棒的小部件來顯示信息,我想在模板中使用它,但不使用窗體。django模板中的渲染小部件

我的模板只用於顯示信息,沒有任何表單需要提交。如何在不使用表單的情況下在模板中呈現此小部件。我必須考慮到這個小部件提供了一些用戶數據。我可以使用模板標籤嗎?

謝謝!

+1

也許調用widget.render方法?它是否存在! – ablm

+0

我怎樣才能在模板中調用渲染方法? – danielrvt

+0

先檢查一下是否存在該方法。如果你想在模板中調用它,你必須製作一個模板標籤。 – ablm

回答

3

在自定義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建議。

3

我會不使用窗體的一般方法是不使用應該在窗體中的對象。本質上,我會創建一個帶有我的小部件的HTML代碼的django模板,以及一個Mixin(正如我通常試圖僅使用基於類的視圖)或一個將爲該小部件生成正確的上下文參數的函數。

這使HTML與HTML保持一致,邏輯與邏輯保持一致。如果它僅用於顯示信息,則不必是一個小部件。

無論你想要哪個小部件,都要確保在你的視圖中調用(功能)或混入(基於類),以及小部件模板{%include%},並讓模板渲染器完成工作。