我有一个很棒的小部件来显示信息,我想在模板中使用它但不使用表单。
我的模板仅用于显示信息,没有要提交的表单。如何在不使用表单的情况下在模板中呈现此小部件。我必须考虑到小部件是用一些用户数据提供的。我可以为此使用模板标签吗?
谢谢!
我有一个很棒的小部件来显示信息,我想在模板中使用它但不使用表单。
我的模板仅用于显示信息,没有要提交的表单。如何在不使用表单的情况下在模板中呈现此小部件。我必须考虑到小部件是用一些用户数据提供的。我可以为此使用模板标签吗?
谢谢!
我不使用表单的一般方法是不使用应该在表单中的对象。本质上,我会使用我的小部件的 HTML 代码和一个 Mixin(我通常尝试只使用基于类的视图)或一个将为小部件生成正确上下文参数的函数创建一个 django 模板。
这使 HTML 与 HTML 保持一致,逻辑与逻辑保持一致。如果它仅用于显示信息,则不必是小部件。
无论您想要小部件在哪里,请确保在您的视图中调用(功能)或混合(基于类),并且只需 {% include %} 小部件模板,并让模板渲染器完成它的工作。
在您的自定义小部件类中实现小部件的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 的建议编写模板标签。