2009-03-13 14 views
21

En Django/Pinax, me he encontrado la forma de inicio de sesión que comienza así:formularios HTML sin acciones

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

Funciona perfectamente bien. Así que supongo que algún script de Java o algo en el marco de Django está poniendo el valor en el atributo de acción.
lo tanto, mi pregunta:

  • ¿Cómo insert Django la acción?
  • ¿Por qué lo hacen así?
  • ¿Cómo puedo saber cuál es la acción de este formulario?

Actualización: Veo que esto no es algo de Django en absoluto, pero lo que hacen la mayoría de los navegadores.

Respuesta

29

Tener una acción de una cadena vacía en la mayoría de los navegadores señala el formulario en la URL que el navegador ha cargado actualmente, que es el script que sirvió el formulario en primer lugar.

+0

ah. No lo sabía. Entonces, ¿esto es solo pereza o es una buena práctica confiar en este – interstar

+0

? Diría que es una buena práctica, ya que reduce el número de URL en su código. pero prefiero no poner la acción en absoluto. ¿algún navegador necesita la acción vacía? – Javier

+12

Forms sin acción attrbiute funcionan bien en todos los navegadores mainstream. Sin embargo, el atributo de acción es obligatorio si desea validar su HTML. – Imran

2

También es posible que javascript cargado con esta página pueda establecer una acción una vez que la página se carga en función de qué aplicación está utilizando la página.

Otra posible posibilidad es que el javascript esté manejando el evento onsubmit. Uno podría hacer que para evitar que la página de descarga, recarga o redirigir a una página específica

5

Para una visión interesante sobre formas con las acciones vacías leer this thread, lo que le da una HTML5 perspectiva actualizada sobre este asunto.

0

Supongo que es un poco tarde para responder a esta publicación. De todos modos, voy a lo que aprendí sobre esto.

Si la "acción" no está especificada en los formularios, entonces el Django busca el HttpResponseRedirect en la vista correspondiente.

Por ejemplo, en el siguiente ejemplo:

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

vez, se valida la forma (y procesado), la página se redirige a 'gracias'

Cuestiones relacionadas