SelectDateWidget - 如何分别到达每个子字段?

时间:2015-02-16 12:20:26

标签: django django-forms django-templates

在项目中使用SelectDateWidget并在模板中呈现它只需要编写form.date_of_sth,但它会将所有小部件(选择)呈现在一个中。我想分别渲染每一个。有没有办法做到这一点?

1 个答案:

答案 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以根据您创建的模板手动渲染每个子字段。

相关问题