2011-08-29 26 views
14

Ho un modulo Django che fa parte della pagina. Diciamo che ho un campo:Come si impostano gli attributi HTML personalizzati nei moduli django?

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

posso accedervi solo nel modello via {{ form.search_input }}. Come impostare gli attributi HTML personalizzati (come nome e valore)? Mi piacerebbe trovare una soluzione flessibile, che mi consenta di aggiungere tutti gli attributi personalizzati necessari a tutti i tipi di campi.

ho trovato https://docs.djangoproject.com/en/dev/ref/forms/widgets/#widget

Ma usando attrs mi dà (se utilizzato con CharField):

__init__() got an unexpected keyword argument 'attrs' 

risposta

17

È possibile modificare il widget sul CharField per ottenere l'effetto che stai cercando.

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

Si può anche provare questo:

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

Ciò è documentato nella sezione intitolata Styling widget instances.

6

vecchia questione, ma per quello che in assoluto è alla ricerca di un'altra alternativa, c'è anche questo: https://docs.djangoproject.com/en/1.6/topics/forms/modelforms/#overriding-the-default-fields

Si può fare qualcosa di simile:

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

C'è anche la soluzione di modello solo utilizzando un filtro. Raccomando django-widget-tweaks:

{% load widget_tweaks %} 

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