Pablasso

Templates en Django

May 29, 2007

Si alguna vez haz utilizado Smarty en PHP entenderás fácilmente como va el sistema de templates en Django. Tal como en Smarty, su objetivo es no mezclar la lógica de programación con el diseño.

Su poder se basa en el principio de la herencia, todo está definido en base a un diseño de base “padre” a menos que un diseño “hijo” diga lo contrario.

Como siempre un ejemplo vale mas que cualquier verbo. Este es un archivo en HTML que tomamos como ejemplo; un head, un body, nada especial.

    <html>
    <head>
        <title>Este es el titulo de mi pagina</title>
    </head>
    <body>
        <h1>Un granjero tenia un perro</h1>
        <p>Se llamaba bingoooooo ... </p>
    </body>
    </html>

Como vamos a repetir esta página en muchos lados, nos conviene etiquetar cada parte que sera repetida considerablemente en bloques, mas específicamente: en title, content y footer.

A este le llamaremos archivo base.html.

    <html>
    <head>
        <title>[% block title %]Este es el titulo de mi pagina[% endblock %]</title>
    </head>
    <body>
        <h1>Un granjero tenia un perro</h1>
        [% block content %]<p>Se llamaba bingoooooo ... </p>[% endblock %]
        [% block footer %]
        <p>Gracias por visitarme<p>
        [% endblock %]
    </body>
    </html>

Ya teniendo la base definida, solo tenemos que preocuparnos por el contenido especial en cada página diferente, ya que el sistema de heredación elimina toda redundancia. Y cada nuevo template contiene código que sea solo único para él mismo.

Para ilustrarme mejor, esta es una página que solo necesito cambiar el titulo.

    [% extends 'base.html' %]
    [% block title %]Este es un titulo personalizado[% endblock %]

Esta otra solo necesitó cambiar el pie de la página.

    [% extends 'base.html' %]
    [% block footer %]Yo soy un mejor pie[% endblock %]

Y esta cambia el titulo y el contenido, mas no el pie

    [% extends 'base.html' %]
    [% block title %]<h3>Titulo grande.. pero menor</h3>[% endblock %]
    [% block content %]<p>Este es un nuevo y simple contenido</p>[% endblock %]

Como puedes ver, al extender el template base.html tomamos toda su información tal cual, incluidos sus bloques, los que si no son sobre-escritos, quedarán de la misma manera.

Obviamente no estas obligado a utilizar el sistema de templates de Django, puedes utilizar cualquier método que te venga en gana, pero yo considero que este tipo de templating cumple y con creces.


Juan Pablo OrtizWritten by Juan Pablo Ortiz who lives and works in Guadalajara, Mexico. You should follow him on Twitter