Flatpages en Django 1.3: cómo saber la página activa
Flatpages es una aplicación disponible en contrib que nos permite crear páginas planas en HTML. Si no necesitamos algo complicado y queremos añadir páginas estáticas a nuestro sitio, esta es nuestra aplicación.
En Django 1.3 han añadido un template tag para realizar un listado de las páginas. Aquí podemos ver el ejemplo disponible en la página oficial:
{% load flatpages %}
{% get_flatpages as flatpages %}
<ul>
{% for page in flatpages %}
<li><a href="{{ page.url }}">{{ page.title }}</a></li>
{% endfor %}
</ul>
Pero si con este listado queremos hacer un menú, siempre es interesante destacar la página en la que estemos situados.
Lo primero que necesitamos es añadir el procesador de contexto para request a TEMPLATE_CONTEXT_PROCESSORS en settings.py. Por defecto, en la versión 1.3 de Django, esta variable toma el siguiente valor:
TEMPLATE_CONTEXT_PROCESSORS = (
'django.contrib.auth.context_processors.auth',
'django.core.context_processors.debug',
'django.core.context_processors.i18n',
'django.core.context_processors.media',
'django.core.context_processors.static',
'django.contrib.messages.context_processors.messages',
)
Aquí añadiremos el procesador que necesitamos:
TEMPLATE_CONTEXT_PROCESSORS = (
...
'django.core.context_processors.request',
)
Y ahora, en nuestra plantilla añadimos lo siguiente:
{% load flatpages %}
{% get_flatpages as flatpages %}
<ul>
{% for page in flatpages %}
<li {% if request.path == page.url %}class="active"{% endif %}><a href="{{ page.url }}">{{ page.title }}</a></li>
{% endfor %}
</ul>
Tags
La teoría es cuando crees saber algo, pero no funciona.
La práctica es cuando algo funciona, pero no sabes por qué.
Los programadores combinan la teoría y la práctica:
Nada funciona y no saben por qué.
