在项目中使用SelectDateWidget
并在模板中呈现它只需要编写form.date_of_sth
,但它会将所有小部件(选择)呈现在一个中。我想分别渲染每一个。有没有办法做到这一点?
答案 0 :(得分:0)
在Django 1.11中:
导入要修改的窗口小部件。您可以在此处找到您的选择:https://docs.djangoproject.com/en/1.11/ref/forms/widgets/#built-in-widgets
创建子类并指定模板名称。
# app/widgets.py
from django.forms.widgets import DefaultWidget
class CustomWidget(DefaultWidget):
template_name = 'app/widget.html'
创建模板。这完全是从django / forms / widgets / multiwidget.html复制的,但你可以在这里放任何你想要的东西。您还可以参考其他现有的小部件模板以获得灵感。您可以在此处找到您的选择:https://github.com/django/django/tree/master/django/forms/templates/django/forms/widgets
# app/templates/app/widget.html
{% spaceless %}
{% for widget in widget.subwidgets %}
{% include widget.template_name %}
{% endfor %}
{% endspaceless %}
导入CustomWidget并将其添加到表单中的字段。
# app/forms.py
from django import forms
from .widgets import CustomWidget
class MyForm(forms.Form):
my_field = forms.ExampleField(widget=CustomWidget())
最后,在您的模板中,渲染主要字段,它将引用app / templates / app / widget.html以根据您创建的模板手动渲染每个子字段。