Как установить пользовательские атрибуты HTML в формах Django? - PullRequest
16 голосов
/ 29 августа 2011

У меня есть форма 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 ]

18 голосов
/ 29 августа 2011

Вы можете изменить виджет на CharField, чтобы добиться эффекта, который вы ищете.

search_input = forms.CharField(_(u'Search word'), required=False)
search_input.widget = forms.TextInput(attrs={'size': 10, 'title': 'Search',})
8 голосов
/ 29 августа 2011

Вы также можете попробовать это:

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

Это описано в разделе, озаглавленном Стилизация экземпляров виджета .

6 голосов
/ 08 октября 2013

Старый вопрос, но для тех, кто ищет другую альтернативу, есть также: 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}),
        }
2 голосов
/ 14 июля 2015

Существует также шаблонное решение с использованием фильтра. Я рекомендую django-widget-tweaks:

{% load widget_tweaks %}

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