【问题标题】:SelectDateWidget - how get to each subfield separately?SelectDateWidget - 如何分别访问每个子字段?
【发布时间】:2015-04-16 22:59:36
【问题描述】:

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

【问题讨论】:

    标签: django django-forms django-templates


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-29
      • 1970-01-01
      • 2021-10-28
      • 2021-04-23
      • 1970-01-01
      • 1970-01-01
      • 2020-04-27
      • 1970-01-01
      相关资源
      最近更新 更多