Django: как добавить произвольные атрибуты html в поля ввода формы?

у меня есть поле ввода, которое отображается с шаблоном так:

<div class="field">
   {{ form.city }}
</div>

который отображается как:

<div class="field">
    <input id="id_city" type="text" name="city" maxlength="100" />
</div>

теперь предположим, что я хочу добавить autocomplete="off" атрибут входного элемента, который отображается, как бы я это сделал? Или onclick="xyz()" или class="my-special-css-class"?

4 ответов


проверять эту страницу

city = forms.CharField(widget=forms.TextInput(attrs={'autocomplete':'off'}))

извините за рекламу, но я недавно выпустил приложение (https://github.com/kmike/django-widget-tweaks), что делает такие задачи еще менее болезненными, поэтому дизайнеры могут сделать это, не касаясь кода python:

{% load widget_tweaks %}
...
<div class="field">
   {{ form.city|attr:"autocomplete:off"|add_class:"my_css_class" }}
</div>

или

{% load widget_tweaks %}
...
<div class="field">
   {% render_field form.city autocomplete="off" class+="my_css_class" %}
</div>

Если вы используете "ModelForm":

class YourModelForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(YourModelForm, self).__init__(*args, **kwargs)
        self.fields['city'].widget.attrs.update({
            'autocomplete': 'off'
        })

если вы используете ModelForm помимо возможности использования __init__ как @Artificioo предоставил в своем ответе, есть widgets словарь В мета, если на то пошло:

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

документация