Pregunta

Tengo algunos enlaces en una página HTML como,, Actualmente los trata como así

<p> <a href="/cases/{{case.id}}/case_rate/-">rate down</a>

y tienen una entrada url.py:

 (r'^cases/(?P<case_id>\d+)/case_rate/(?P<oper>.)$', 'mysite.cases.views.case_rate'),

entonces tengo una función de vista que se encarga de la lógica y pega en la base de datos, a continuación, hace esto:

return HttpResponseRedirect(request.META.get('HTTP_REFERER','/'))

I de Hay una mejor manera de hacer esto? Puedo ver cómo esto estaría bien, ya que no tiene que volver a dibujar la pantalla para mostrar la nueva calificación ...

¿Fue útil?

Solución

La forma típica de manejar esto es con una petición AJAX.

En lugar de un enlace, se pone un controlador de JavaScript que llama a una vista, cosa que actualiza la base de datos, y devuelve un objeto JSON / XML con la nueva calificación para el artículo. A continuación, otro mango Javascript recibe esa respuesta y actualiza el número de clasificación en la pantalla, sin una recarga la página.

Lo ideal es mantener las dos versiones: HTML plano (la que tiene actualmente) y el Ajax. El Ajax se puede ser conectar al elemento después de carga de la página, por lo que si Javascript no está disponible, usted todavía tiene un sitio de trabajo.

A continuación, en cuanto a organización, puede tener un parámetro de "Ajax" en su punto de vista. La vista debe actualizar la base de datos en consecuencia, y si se trata de una llamada ajax, devolver la respuesta JSON / XML, de lo contrario, devuelve la nueva página. De esta manera se puede mantener la lógica (ir a buscar el objeto, la actualización de la base de datos) en un solo lugar.

Otros consejos

Si estás preguntando si case_rate todavía debe ir en el views.py dado que devuelve una redirección en lugar de proporcionar el contenido, la respuesta es sí, ya case_rate está manejando una solicitud y devolver una respuesta.

Sin embargo, considere una situación en la que tuvo dos funciones de vista en views.py que tenían algo de código duplicado, y se eligió al factor de que el código duplicado en otra función que no lo hizo tanto captar la solicitud y devolver una respuesta. ¿Sería juego justo dejar en views.py? Claro, si se mueve en otro lugar haría que el código sea más difícil de leer. O puede optar por ponerlo en otro lugar. Es realmente su llamada basada en el sentido del gusto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top