2012-11-23 11 views
5

Uso la registrazione django per il mio progetto. nel mio registration_form.html di file:Come aggiungere segnaposto alle forme di registrazione di Django

{{form.username}} 
{{form.email}} 
//other fields 

e voglio impostare segnaposto per ogni campo. Ma questo è un tipo di app integrata. quindi ho bisogno di trovare il modo per modificare questi campi dalla mia app principale.

Non voglio cambiare la fonte della registrazione di django.

+0

Si definiscono moduli django personalizzati per questo o utilizzando i moduli incorporati? – arulmr

+0

utilizzo i [moduli] incorporati (http://docs.b-list.org/django-registration/0.8/forms.html?highlight=registration%20form#registration.forms.RegistrationFormUniqueEmail) – alix

+0

Va bene con tu, per aggiungere segnaposto ai campi usando jQuery? – arulmr

risposta

20

Se è possibile sostituire il modulo built-in, è possibile definire il segnaposto come segue:

class RegistrationForm(forms.ModelForm): 
    class Meta: 
     model = YourModelName 
     widgets = { 
      'username' : forms.TextInput(attrs = {'placeholder': 'Username'}), 
      'email' : forms.TextInput(attrs = {'placeholder': 'E-Mail'}), 
     } 

Oppure è possibile utilizzare jQuery per aggiungere segnaposto per i campi utilizzando corrispondente del campo id come indicato di seguito :

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
<script type="text/javascript" > 
    $(document).ready(function(){ 
     $("#id_username").attr('placeholder', '{{form.username.label}}'); 
     $("#id_email").attr('placeholder', '{{form.email.label}}'); 
    }); 
</script> 

È possibile utilizzare firebug per trovare l'id del campo.

+0

grazie. ha funzionato. – alix

+0

Felice di aiutare :) – arulmr

+0

Puoi modificare la risposta per aggiungere "come sovrascrivere il modulo integrato"? Ad esempio ho creato una directory "account", ho creato un modulo chiamato "forms.py" ma questo dovrebbe essere chiamato da urls.py giusto? – realnot

11

In realtà creerei un filtro di tag modello che modifica il campo.

@register.filter 
def html_placeholder(field, args=None): 
    if args == None: 
     return field 
    field.field.widget.attrs.update({ "placeholder": args }) 
    return field 
+1

https://docs.djangoproject.com/en/dev/howto/custom-template-tags/ – max4ever

1

Un altro approccio, che lavora per django.contrib.auth.AuthenticationForm (e presumo dovrebbe funzionare nel tuo caso pure) è quello di iniettare queste informazioni durante il rendering della vista. In questo modo non è necessario incorporarlo nella classe del modulo e non è necessario forzare jquery.

def index(request): 
    form = AuthenticationForm(request) 
    form.fields['username'].widget.attrs.update({ 
      'placeholder': 'Name' 
     }) 
    form.fields['password'].widget.attrs.update({ 
      'placeholder': 'Password' 
     }) 

    context = RequestContext(request, { 
     'form' : form, 
    }) 
    return HttpResponse(template.render(context)) 
Problemi correlati