2009-03-13 15 views
21

In Django/Pinax, ho incontrato il form di login, che inizia così:moduli HTML senza azioni

<form class="login" method="POST" action=""> 

Funziona perfettamente. Quindi presumo che o qualche java-script o qualcosa del framework Django stia mettendo il valore nell'attributo action.
Quindi, le mie domande:

  • Come Django inserire l'azione?
  • Perché lo fanno in questo modo?
  • Come posso sapere qual è l'azione di questo modulo?

Aggiornamento: Vedo che questa non è una cosa Django, ma ciò che la maggior parte dei browser fa.

risposta

29

Avendo un'azione di una stringa vuota nella maggior parte dei browser punta il modulo all'URL attualmente caricato dal browser, che è lo script che ha servito il modulo in primo luogo.

+0

ah 'grazie'. Non lo sapevo. Quindi questa è solo pigrizia o è una buona pratica affidarsi a questo – interstar

+0

direi buone pratiche, dal momento che riduci il numero di URL nel tuo codice. ma preferisco non mettere affatto l'azione. un browser là fuori ha bisogno di un'azione vuota? – Javier

+12

I moduli senza azione attrbiute funzionano bene in tutti i browser tradizionali. Tuttavia l'attributo action è obbligatorio se vuoi che il tuo codice HTML venga convalidato. – Imran

2

È anche possibile che JavaScript caricato con questa pagina possa impostare un'azione dopo aver caricato la pagina in base all'applicazione utilizzata dalla pagina.

Un'altra probabile possibilità è che il javascript gestisca l'evento onsubmit. Si potrebbe fare questo a impedire che la pagina da ricaricare o reindirizzamento ad una pagina specifica

5

Per una panoramica interessante su forme con le azioni vuote leggere this thread, che vi dà un HTML5-prospettiva aggiornato in materia.

0

Immagino che sia un po 'tardi per rispondere a questo post. Ad ogni modo, farò quello che ho imparato su questo.

Se la "azione" non è specificata nei moduli, Django cerca lo HttpResponseRedirect nella vista corrispondente.

Ad esempio, nell'esempio seguente:

if form.is_valid(): # All validation rules pass 
     # Process the data in form.cleaned_data 
     # ... 
     return HttpResponseRedirect('/thanks/') 

volta, il modulo viene convalidato (e trasformati), la pagina viene reindirizzato