Quiero resaltar la página actual en el menú de navegación. Obviamente necesito darle al menú enlaces una clase como 'activa' cuando estás en su página. Este es un problema clásico y he visto muchas soluciones proposed. Mi problema es que los odio a todos y no considero que ninguno de ellos sea muy SECO. Por ejemplo:¿Por qué tengo que pasar RequestContext en todas mis respuestas?
@register.simple_tag
def active(request, pattern):
import re
if re.search(pattern, request.path):
return 'active'
return ''
----
{% load tags %}
<div id="navigation">
<a class="{% active request "^/about/" %}" href="/about/">About</a>
<a class="{% active request "^/contact/" %}" href="/contact/">Contact</a>
<a class="{% active request "^/services/" %}" href="/services/">Services</a>
</div>
La etiqueta lleva su solicitud actual y una expresión url y vuelve 'activo' si está actualmente en esta página. Alternativamente, esto se puede hacer con vistas nombradas en lugar de urls, pero el principio es el mismo.
Mi principal problema con esto es que mi navegación será llamado en el 99% de mis puntos de vista y, sin embargo, con el fin de obtener la variable solicitud actual todavía tengo analizar una RequestContext a la plantilla con algo como esto:
def contact(request):
# snip ...
return render_to_response(
'contact.html',
{ 'myvar' : myvar },
context_instance=RequestContext(request))
¿Por qué tengo que agregar esta línea de instancia de contexto a cada una de mis vistas cuando probablemente todas menos necesitan la variable de solicitud para obtener la url/vista actual para resaltar el enlace activo? Esto parece terriblemente húmedo, especialmente para una característica que debe estar en la gran mayoría de los sitios de django. Deseo que la solicitud se incluya por defecto y poder suprimirla opcionalmente. No puedo encontrar una forma de hacerlo en middleware ya que no puedo interceptar la plantilla antes de que se represente después de que la vista la haya devuelto.
¿Alguna sugerencia?
¡El decorador @render_to es brillante! ¡Gracias! – Jimmy
+1 por recomendar @render_to! tenga en cuenta que [django-fastidioso] (https://github.com/skorokithakis/django-annoying) ha sido tomado y movido debido a la inactividad – antiplex
4 años después, y Django 1.5 ha eliminado el 'direct_to_template'. ¿Cuál sería ahora la forma recomendada para hacer esto, sin usar django-molesto – Patrick