2011-08-29 50 views
14

Tengo un formulario de Django que forma parte de la página. Digamos que tengo un campo:¿Cómo configuro los atributos HTML personalizados en formularios django?

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

puedo acceder a ella sólo en la plantilla a través de {{ form.search_input }}. ¿Cómo establecer atributos HTML personalizados (como el nombre y el valor)? Me gustaría encontrar una solución flexible que me permita agregar los atributos personalizados necesarios a todos los tipos de campos.

He encontrado https://docs.djangoproject.com/en/dev/ref/forms/widgets/#widget

Pero el uso de attrs me da (si se utiliza con CharField):

__init__() got an unexpected keyword argument 'attrs' 

Respuesta

17

Puede cambiar el widget en la CharField para lograr el efecto que se busca.

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

También puede probar esto:

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

Esto está documentado en la sección titulada Styling widget instances.

6

vieja pregunta, pero para que la historia está buscando otra alternativa, también hay esto: https://docs.djangoproject.com/en/1.6/topics/forms/modelforms/#overriding-the-default-fields

Usted puede hacer algo como esto:

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

También está la solución de la plantilla de sólo usar un filtro. Recomiendo django-widget-tweaks:

{% load widget_tweaks %} 

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