Si ha organizado su proyecto en una plantilla base.html
extendida por otras plantillas, p. appname/pagename.html
, puede usar un enfoque centrado en la plantilla para resaltar el elemento de navegación activo.
Este enfoque ofrece algunas ventajas de desacoplamiento, que he mencionado en detalle al final de esta respuesta.
He encontrado que este enfoque es muy útil para manejar elementos de navegación amplios que permanecen iguales en la mayoría o la totalidad de un sitio. Probablemente no sea una solución adecuada para elementos de navegación más detallados, como la representación de una lista dinámica de elementos recopilados de su almacén de datos.
En su plantilla base.html
, añadir un bloque a cada elemento de navegación, dando nombres únicos a los bloques:
<ul class="nav">
<li class="{% block navbar_class-home %}{% endblock %}">
<a href="#">Home</a>
</li>
<li class="{% block navbar_class-about %}{% endblock %}">
<a href="#">About</a>
</li>
<li class="{% block navbar_class-pricing %}{% endblock %}">
<a href="#">Pricing</a>
</li>
</ul>
En su plantilla appname/pagename.html
, si quieres uno de los elementos de navegación a aparecer activo, anular el bloque apropiado usando active
como contenido.Por ejemplo, para poner de relieve el "Acerca de" material:
{% block navbar_class-about %} current {% endblock %}
Cuando se utiliza una vista que hace que esa plantilla, que va a render así:
<ul class="nav">
<li class="">
<a href="#">Home</a>
</li>
<li class=" current ">
<a href="#">About</a>
</li>
<li class="">
<a href="#">Pricing</a>
</li>
</ul>
Esto proporciona una representación inicial que doesn' confía en JavaScript. (Puede modificar las clases de barra de navegación en su sitio utilizando JavaScript, si está haciendo una aplicación de una sola página.)
Para muchos (pero no todos) de los casos, esto puede ser una presentación mejor separación de la vista lógica:
Puede modificar las vistas para adjuntar datos de navegación del sitio al contexto de la plantilla, pero al hacerlo combina la presentación con la capa de visualización y dificulta la creación de aplicaciones reutilizables o la integración de aplicaciones de terceros.
La vista ya está seleccionando una plantilla con nombre, lo que significa que ya está pasando algo de información relacionada con la navegación a la capa de la plantilla. Eso puede ser todo lo que necesitas.
Puede usar un procesador de contexto de plantilla para obtener información sobre la vista, pero esto solo mueve el acoplamiento fuerte a otra capa del sistema, en lugar de permanecer dentro de la capa de plantilla.