//barrabarra

JAVIER ROMERO
Programación web y escritorio
 

Django: Flatpages devuelven error 404

mayo 17, 2010 at 8:08 pm | Blog, Programación | No comment

 

Los últimos proyectos en los que estoy trabajando van sobre una plataforma de comercio electrónico.
Como tal, a la hora de mostrar errores a los visitantes/clientes, es importante no desconcertarlos y hacer que pierdan la confianza en el sitio web, por lo cual se personalizan las páginas de error para que se integren en el resto del sitio y además se aprovecha para mostrarle productos que podrían interesarle.

Debido a estos listados de productos no podemos simplemente renderizar un template para los errores, sino que he implementado un manejador para los errores: file_not_found_404 y handler_500. Estos hacían bien su trabajo mientras realizaba el desarrollo en local, sin embargo, cuando se pasaba a pruebas en el entorno de producción todas las páginas estáticas definidas con el framework flatpages direccionaban a la página de error 404.

Después de muchas vueltas, pruebas, desactivar el manejador, revisar logs y volver a probar y a dar vueltas ví que en los logs de acceso las páginas de errores 404 devolvían un status 200 (Ok), lo cual finalmente me dió la pista que necesitaba: tenía que sobreescribir el status_code de la respuesta a 404, ya que por defecto el valor es 200.

El manejador quedó con algo parecido a esto:


def file_not_found_404(request):
page_title = _('Page Not Found')

featured = Product.featured.all()[0:FEATURED_PER_ROW]
bestseller = Product.bestseller.all()[0:BESTSELLER_PER_ROW]
recommended = Product.recommended.all()[0:RECOMMENDED_PER_ROW]

response = render_to_response('404.html', locals(), context_instance=RequestContext(request))
response.status_code = 404
return response



<< Volver al Blog Comentar la entrada

 
No hay comentarios en “Django: Flatpages devuelven error 404”
Deja tu comentario

Categorias:

Archivo: