如何在Django表单中设置自定义HTML属性?

22 投票
4 回答
39813 浏览
提问于 2025-04-17 00:32

我有一个Django表单,它是网页的一部分。假设我有一个字段:

search_input = forms.CharField(_(u'Search word'), required=False)

我只能通过模板中的{{ form.search_input }}来访问它。请问如何设置自定义的HTML属性(比如名字和数值)呢?我希望找到一个灵活的解决方案,这样我就可以为所有类型的字段添加任何需要的自定义属性。

我找到了一些资料,地址是https://docs.djangoproject.com/en/dev/ref/forms/widgets/#widget

但是使用attrs时,如果和CharField一起用,会给我这样的结果:

__init__() got an unexpected keyword argument 'attrs'

4 个回答

9

还有一种仅使用模板的解决方案,利用了一个过滤器。我推荐你使用 django-widget-tweaks 这个工具:

{% load widget_tweaks %}

{{ form.email|attr:'required:true' }}
11

你也可以试试这个:

search_input = forms.CharField(
    _(u'Search word'),
    required=False,
    widget=forms.TextInput(attrs={'size': 10, 'title': 'Search',})
)

这个内容在标题为 样式化小部件实例 的部分有详细说明。

27

你可以把CharField上的小部件换掉,这样就能达到你想要的效果。

search_input = forms.CharField(_(u'Search word'), required=False)
search_input.widget = forms.TextInput(attrs={'size': 10, 'title': 'Search',})

撰写回答