Una de las primeras cosas que uno quiere saber cuando inicia con un Web Framework es como se manejan todas esas cosa que van a los costados del contenido principal: la caja de búsquedas, la encuestas, la caja de lógin, el plugin del clima si existe, etc. Lo que se se conoce como “Sidebars Elements”.
En el caso de CakePHP son los elements que pueden ser estáticos, puro HTML o “alimentados” por un componente que les pasa un array que procesan:
echo $this->element(‘lastentries’, $Element[‘Last_entries’]);
En el caso de Django son algo llamado “Custom template tags“, que son una manera de extender los templates.
Se necesita crear un directorio templatetags dentro de la app de la cual queremos tomar datos, crear el archivo __init_.py para que Python tome ese dir como paquete y crear un archivo en el dir templatetags que incluya algo como:
from django import template
register = template.Library()
def view_poll():
poll = Poll.objects.filter(published=True).order_by(“-id”)[:1]
return {‘poll’:poll}
register.inclusion_tag(‘polls/show.html’)(view_poll)
en en este caso es el archivo polls_extras.py pues quiero un tag que muestre la encuesta en todo el sitio. La función poll_view() hace una consulta al modelo y regresa el diccionario poll. La consulta es el equivalente a:
#=SELECT * FROM polls_poll WHERE published=TRUE ORDER BY id DESC LIMIT 1;
La linea inclusion_tag() asocia el resultado de la función con un template, en este caso polls/show.html
Una vez registrado el tag ya lo puedo cargar en el layout principal, en el caso de Coátl es portal.html:
{% load poll_extras %}
Y luego:
{% view_poll %}
Y con eso ya estuvo, en el archivo poll_extras.py podemos definir y registrar tantos tags como nos hagan falta. En el caso de sidebars elements de html estático es más fácil:
{% include ‘elements/nav.html’ %}
I like this shit!