Templates en Django
29/05/2007Si alguna vez haz utilizado Smarty en PHP entenderás facilmente 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 esta 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.
1 2 3 4 5 6 7 8 9 | <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 especificamente; en title, content y footer.
A este le llamaremos archivo ‘base.html’.
1 2 3 4 5 6 7 8 9 10 11 12 | <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 unico para el mismo.
Para ilustrarme mejor, esta es una página que solo necesito cambiar el titulo.
1 2 | {% extends 'base.html' %}
{% block title %}Este es un titulo personalizado{% endblock %} |
Esta otra solo necesitó cambiar el pie de la página.
1 2 | {% extends 'base.html' %}
{% block footer %}Yo soy un mejor pie{% endblock %} |
Y esta cambia el titulo y el contenido, mas no el pie
1 2 3 | {% 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 sobreescritos, quedaran de la misma manera.
Obviamente no estas obligado a utilizar el sistema de templates de Django, puedes utilizar cualquier metodo que te venga en gana, pero yo considero que este tipo de templating cumple.. y con creces.


Hay 2 comentarios: