[Zope-es] Utilizar el standard_error_message como handler

Emilio A.Sánchez López esanchez en aditel.org
Mie Dic 18 00:26:41 CET 2002


   Alguien ha utilizado alguna vez el standard_error_message para servir
una pagina que no sea un error? Por si alguien intenta hacerlo alguna
vez, os indico un par de detalles que me han traido de cabeza.

   Yo he estado intentando utilizarlo para servir paginas a partir de
urls como: http://server/folder/name donde folder es un objeto folder de
Zope pero que no contiene ningun objeto llamado name. Evidentemente
salta un error y la primera opción que a uno se le ocurre es usar el
standard_error_message para capturar el error y servir la pagina
deseada.

   Una opción es utilizar la funcion redirect del modulo Response. Para
mi caso en concreto no me servía porque el redirect, como su propio
nombre indica, me redirecciona lo que hace aparecer una url diferente en
el navegador y no era mi intencion que http://server/folder/name se
convirtiese de repente en http://server/folder/script?param=value.

   Por tanto me plantee el servir la pagina como contenido del
standard_error_message. Desgraciadamente esto plantea tres problemas.

   1º El status de la pagina que se sirve sigue siendo de error y no se 
      puede cambiar. He intentado response.setStatus(200) pero me 
      ignora vilmente.
   2º A la pagina se le añade el traceback del error como un comentario 
      de html. He visto buceando en el codigo de Zope que hay una 
      función para desabilitar esto.
   3º La página debe comenzar por <html> o por <!doctype html de lo 
      contrario Zope añade una cabecera y un pie de error que están
      hardcoded en el propio codigo de Zope. Esto me impide mostrar
      paginas que comiencen por <?xml version="1.0" encoding=...

   Con lo cual deduzco que el standard_error_message me va muy bien para
servir paginas de error personalizadas o para redirigir a otras paginas,
pero no para servir una pagina que no sea un error.

   Un compañero me comento que para este tipo de cosas se podian usar
rewrite rules del apache, de forma que automaticamente se convirtiese
una peticion a http://server/folder/name en
http://server/folder/script?param=name pero la verdad, meterse con el
apache para conseguir eso me parece un poco fuerte.

   Finalmente he utilizado la opcion de utilizar el traverse_subpath.
Esto es, convertir "folder" en un objeto que no es un folder (valga la
redundancia), concretamente en un zpt. De forma que una llamada a
http://server/folder/name1/name2 resulta que en el request tenemos un
atributo llamado traverse_subpath que contiene ['name1','name2']. Ahora
utilizando programacion desde el objeto folder ya se puede servir lo que
nos venga en gana.

   Bueno, estas han sido mis experiencias sirviendo objetos de zope que
no existen. Alguien ha hecho algo similar de alguna forma mas sencilla?
Alguien ha utilizado el standard_error_message para estas cosas?

   Un saludo.

-- 
--------------------------------
Emilio A. Sanchez Lopez
E-mail: esanchez en aditel.org
http://www.aditel.org/~esanchez
--------------------------------
------