2

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

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

谢谢!

4

2 回答 2

3

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

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

无论您想要小部件在哪里,请确保在您的视图中调用(功能)或混合(基于类),并且只需 {% include %} 小部件模板,并让模板渲染器完成它的工作。

于 2012-08-30T01:35:56.697 回答
3

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

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

render 方法负责小部件的 html 表示。例如,render 方法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"/>'

然后,您可以将 render 方法的返回值添加到视图的上下文中。

def my_view(request):
   widget_html = MyCustomWidget.render(...)
   return render_to_response(..., {'widget_html': widget_html})

现在您可以使用以下方法在模板中显示小部件:

{{ widget_html }}

您还可以按照@ablm 的建议编写模板标签。

于 2012-08-30T01:38:04.767 回答