GHRML en Django [ Haml ]

django-logoComo mencioné en el anterior post, me encantó la simpleza de Haml, así que decidí probar GHRML, el cual tiene una sintaxis muy similar y puede ser utilizado con Django. Si bien fue un vistazo rápido, pude sacar algunas conclusiones interesantes.

Instalación

Instalar GHRML es tan fácil como hacerlo con casi cualquier otra aplicación de Python, vía setuptools (ejemplo en linux):

easy_install GHRML

Y listo! Ya tenemos GHRML instalado en nuestro directorio de paquetes de Python. Ahora sólo resta indicarle a nuestra app de Django dónde buscar los templates cuando los representemos con este lenguaje de markup. En mi caso, como se trataba de una prueba, simplemente le indiqué el mismo directorio donde se encuentran usualmente los templates del sistema de templates de Django. Esto lo hice agregando al archivo settings.py lo siguiente:

GENSHI_TEMPLATE_DIRS = (
    os.path.join(os.path.basename(__file__), 'templates'),
)

Con esto nos aseguramos de que al llamar al render_to_response de GHRML, encuentre los templates. De otra forma lanzaría un error.

Usando GHRML

Para poder escribir templates mediante este lenguaje, simplemente importamos lo que necesitemos de ghrml.ghrml_django, por ejemplo, la antes mencionada render_to_response:

from ghrml.ghrml_django import render_to_response as render_ghrml

En mi caso particular le puse un alias a render_to_response, ya que seguía usando su versión original para algunas pruebas.

Una vez importado, simplemente reemplazamos los render_to_response que queramos, por los correspondientes render_ghrml, siempre teniendo en cuenta que el template al que apuntamos esté escrito en este lenguaje.

Ventajas y desventajas

Una ventaja obvia de utilizar GHRML es que se simplifica enormemente la tarea y el tiempo de escribir nuestros templates, ya que no sólo “ahorramos” código, sino que Haml resulta muchísimo más fáciles de leer. A esto tenemos que sumar la facilidad de instalación y el hecho de que podemos usar Haml con otros lenguajes (como Ruby o PHP), de forma que no necesitaremos acostumbrarnos a un sistema de templates diferentes para cada framework o lenguaje.

Por otro lado, GHRML tiene algunas “fallas”; por ejemplo, al querer utilizar el “tag” %ul (y %li), sin haber puesto %html y %body en el template que estamos editando, la lista no se renderizará como debe. Además de esto, me he encontrado con un problema muy grave, para el cual – de momento – no tengo solución: los forms no se generan automáticamente. Por ejemplo, cuando quiero hacer form.as_p, como esto renderiza un form en el lenguaje de templates de Django, GHRML no lo reconoce y pone otra cosa en la página (si no me equivoco, renderiza la representación del objeto). Imagino que existirá alguna solución (que no sea armar los forms a “mano”), sino ya me iré acostumbrando a hacerlos un poco más “artesanales”. Otra falencia grave de este lenguaje es la ausencia casi total de documentación, aunque la sintaxis es casi igual a la de Haml, por lo cual se puede aprender a usarlo en la página de documentación de éste.

Una última aclaración: en la página del Trac de GHRML dicen que tiene dependencia con Genshi, por lo cual supongo que las setuptools se encargaron de instalarlo por mí.

¿Alguno de ustedes ha probado GHRML? ¿Han tenido los mismos problemas que yo? Si alguien encontró cómo hacer funcionar lo de los forms, ¡avise!

Tags: , , , , , , ,

This entry was posted on Tuesday, November 24th, 2009 at 10:47 am and is filed under Desarrollo Web, Django, Python, Tutoriales. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

Leave a Reply