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

Jac*_*Leo 16 html python forms django custom-attributes

我有一个Django表单,它是页面的一部分.让我们说我有一个领域:

search_input = forms.CharField(_(u'Search word'), required=False)
Run Code Online (Sandbox Code Playgroud)

我只能在模板中访问它{{ form.search_input }}.如何设置自定义HTML attrs(如名称和值)?我想找到灵活的解决方案,这将允许我向所有类型的字段添加任何所需的自定义属性.

我找到了https://docs.djangoproject.com/en/dev/ref/forms/widgets/#widget

但使用attrs给我(如果与CharField一起使用):

__init__() got an unexpected keyword argument 'attrs'
Run Code Online (Sandbox Code Playgroud)

小智 18

您可以更改CharField上的小部件以实现您正在寻找的效果.

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


Don*_*Don 8

你也可以试试这个:

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

这在题为样式化小部件实例的部分中有记录.


Joh*_*ann 7

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

{% load widget_tweaks %}

{{ form.email|attr:'required:true' }}
Run Code Online (Sandbox Code Playgroud)


web*_*ers 6

老问题,但对于谁 - 正在寻找另一种选择,还有这个: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}),
        }
Run Code Online (Sandbox Code Playgroud)