Welcome | Members | News | Search | Documentacion | Foros |
You are here: Home » Miembros » javierm's Home » Recetas para Zope » Tratamiento de objetos virtuales
 
You are not logged in
Link icon Log in Link icon Join
Log in
Name
Password

Tratamiento de objetos virtuales

Cómo utilizar una URL del tipo http://server/news/2002/12/3/ en lugar de http://server/news/show?year=2002&month=12&day=3 .

Extraido de este mensaje de la lista de correo de Zope en español.

Quizá alguna vez se os haya ocurrido simular los argumentos de un script mediante una estructura de directorias para ocultar la existencia de dicho programa o, sencillamente, mostrar una URL más intuitiva.

En Zope la primera opción a considerar sería crear un DTML Method llamado standard_error_message e insertar en él el código que queramos o llamar desde ahí a un programa externo. Lamentablemente esto plantea varios problemas. Por ejemplo, el código de respuesta siempre será un código de error y además se insertará información de depuración. Por tanto, esta opción queda descartada.

Otra forma de hacerlo sería redirigiendo la petición a la página que deseamos, pero eso haría aparecer en el navegador del cliente la verdadera URL. Esto también invalida esta opción.

Para poder cumplir todas las necesidades es necesario hacer uso de la propiedad traverse_subpath de la petición y utilizar un objeto programable en lugar de un Folder. traverse_subpath contiene una lista en la que se encuentran los nombres de cada unos de los directorios de la URL hasta el objeto en el que se utilizar.

En nuestro ejemplo podríamos tener una Page Template llamada news en el que podríamos hacer algo como:

  <span tal:define="year python:request['traverse_subpath'][0]"
      tal:define="month python:request['traverse_subpath'][1]"
      tal:define="day python:request['traverse_subpath'][2]"
      tal:replace="python:container.show(year,month,day)"/>