在django模板中渲染小部件

时间:2012-08-30 00:18:09

标签: django django-templates django-widget

我有一个很棒的小部件来显示信息,我想在模板中使用它但不使用表单。

我的模板仅用于显示信息,没有可提交的表单。如何在不使用表单的情况下在模板中呈现此窗口小部件。我必须考虑到窗口小部件是带有一些用户数据的。我可以使用模板标签吗?

谢谢!

2 个答案:

答案 0 :(得分:3)

我不使用表单的一般方法是不使用应该在表单中的对象。基本上,我将使用我的小部件的HTML代码和Mixin(我通常只尝试使用基于类的视图)创建一个django模板,或者为小部件生成正确的上下文参数的函数。

这使HTML与HTML保持一致,逻辑与逻辑保持一致。如果它仅用于显示信息,则不必是小部件。

无论你想要哪个小部件,都要确保mixin在视图中被调用(功能)或混合在一起(基于类),并且只是{%include%}小部件模板,让模板渲染器完成它的工作。 / p>

答案 1 :(得分:3)

在自定义Widget类中实现窗口小部件的render方法。

render(self, name, value, attrs=None)

render方法负责窗口小部件的html表示。 例如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 }}

你也可以写一个模板标签@ablm建议。