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

标签 django django-forms django-templates

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

最佳答案

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

关于django - SelectDateWidget - 如何分别到达每个子字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28541327/

相关文章:

html - CSS 文件未加载

html - 如何在 Django View 中重用 HTML 片段

python - 删除了InDjango110警告: The context_instance argument of render_to_string is deprecated

php - RBAC 或 ACL,用于私有(private)内容?

python - 通过字典名称从不同的字典中获取信息

jquery - 使用 Ajax 在 Django 中打开 Reportlab 生成的 PDF 文件

python - 表单配置不正确 - Django

python - 如何在 Django 中为具有多个值的多对多属性的模型创建过滤器查询集

使用 JSON 的 Django 多语言文本字段

Django-crispy-forms 和工具提示