我刚到django。
我想创建一个自定义小部件。
forms.py格式:
from project.widgets import MultiChoiceFilterWidget
class CustomSearchForm(FacetedSearchForm):
TEST_COLORS = [
u"Blau", u"Rot", u"Gelb"
]
color = forms.MultipleChoiceField(
label=_("Color"), choices=[(x, x) for x in TEST_COLORS],
widget=MultiChoiceFilterWidget, required=False)
小工具.py:
class MultiChoiceFilterWidget(forms.widgets.CheckboxSelectMultiple):
template_name = 'project/widgets/filter.html'
option_template_name = 'ptoject/widgets/filter_option.html'
项目/widgets/filter.html:
<h1>TEST</h1>
但它不呈现新模板,而是仍然以旧方式呈现。
你能给我一些提示吗?
似乎您正在尝试使用仅在Django 1.11中可用的template-based widget form rendering API,而您应该升级到Django 1.11或使用旧方法,即overriding the render() method
要呈现新的小部件模板,必须执行以下步骤:
1)将“django.forms”添加到已安装的应用程序中
2)将FORM_RENDERER='django.forms.renderers.TemplatesSetting'添加到settings.py中。
更多详细信息:https://docs.djangoproject.com/en/2.0/ref/forms/renderers/#django.forms.renderers.TemplatesSetting
Django版本<;1.11:
小部件必须实现
render
方法才能呈现不同的模板:Django 1.11版:
在renderer's documentation中,我们可以找到以下内容:
通过查看widget source code,特别是
Input
小部件如何扩展Widget
类,我们可以看到您只需要按如下方式自定义小部件:这就是你已经拥有的。
相关问题 更多 >
编程相关推荐