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

22

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

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

我只能通过模板访问它,方式是 {{ form.search_input }}。如何设置自定义HTML属性(例如名称和值)?我想找到一种灵活的解决方案,可以允许我向所有类型的字段添加任何需要的自定义属性。

我在https://docs.djangoproject.com/en/dev/ref/forms/widgets/#widget找到了相关信息。

但是,如果与CharField一起使用,使用attrs会给我带来以下问题:

__init__() got an unexpected keyword argument 'attrs'
4个回答

27

您可以更改CharField上的小部件以实现您想要的效果。

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

11

你也可以尝试这个:

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

这在标题为 “Styling widget instances” 的部分中有记录。


8

还有一种仅使用过滤器的模板解决方案。我建议使用django-widget-tweaks

{% load widget_tweaks %}

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

我一直没能让它起作用,如果我想改变例如"pattern"。 - CutePoison

7

虽然这个问题很老了,但是如果你正在寻找其他的替代方案,也可以考虑这个:

https://docs.djangoproject.com/en/1.6/topics/forms/modelforms/#overriding-the-default-fields

你可以像下面这样做:

from django.forms import ModelForm, Textarea
from myapp.models import Author

class AuthorForm(ModelForm):
    class Meta:
        model = Author
        fields = ('name', 'title', 'birth_date')
        widgets = {
            'name': Textarea(attrs={'cols': 80, 'rows': 20}),
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接