Ответ 1
Вы можете изменить виджет на CharField, чтобы добиться эффекта, который вы ищете.
search_input = forms.CharField(_(u'Search word'), required=False)
search_input.widget = forms.TextInput(attrs={'size': 10, 'title': 'Search',})
У меня есть форма 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'
Вы можете изменить виджет на CharField, чтобы добиться эффекта, который вы ищете.
search_input = forms.CharField(_(u'Search word'), required=False)
search_input.widget = forms.TextInput(attrs={'size': 10, 'title': 'Search',})
Вы также можете попробовать следующее:
search_input = forms.CharField(
_(u'Search word'),
required=False,
widget=forms.TextInput(attrs={'size': 10, 'title': 'Search',})
)
Это описано в разделе, озаглавленном Элементы виджета стилизации.
Старый вопрос, но для тех, кто когда-либо ищет другую альтернативу, есть и следующее: 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}),
}
Также существует только шаблонное решение с использованием фильтра. Я рекомендую django-widget-tweaks
:
{% load widget_tweaks %}
{{ form.email|attr:'required:true' }}