2012-08-30 46 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%},并让模板渲染器完成工作。