Ich mochte die Sauberkeit von 110j oben, also nahm ich das meiste davon und überarbeitete, um die 3 Probleme zu lösen, die ich damit hatte:
- Der reguläre Ausdruck stimmte mit der URL "Zuhause" mit allen anderen überein
- Ich brauchte mehrere URLs, die einer Navigationsregisterkarte zugeordnet waren , daher brauchte ich ein komplexeres Tag, das eine variable Anzahl von Parametern akzeptiert
- Einige URL-Probleme wurden behoben
Hier ist es:
tags.py:
from django import template
register = template.Library()
@register.tag
def active(parser, token):
args = token.split_contents()
template_tag = args[0]
if len(args) < 2:
raise template.TemplateSyntaxError, "%r tag requires at least one argument" % template_tag
return NavSelectedNode(args[1:])
class NavSelectedNode(template.Node):
def __init__(self, patterns):
self.patterns = patterns
def render(self, context):
path = context['request'].path
for p in self.patterns:
pValue = template.Variable(p).resolve(context)
if path == pValue:
return "active" # change this if needed for other bootstrap version (compatible with 3.2)
return ""
urls.py:
urlpatterns += patterns('',
url(r'/$', view_home_method, {}, name='home_url_name'),
url(r'/services/$', view_services_method, {}, name='services_url_name'),
url(r'/contact/$', view_contact_method, {}, name='contact_url_name'),
url(r'/contact/$', view_contact2_method, {}, name='contact2_url_name'),
)
base.html:
{% load tags %}
{% url home_url_name as home %}
{% url services_url_name as services %}
{% url contact_url_name as contact %}
{% url contact2_url_name as contact2 %}
<div id="navigation">
<a class="{% active request home %}" href="home">Home</a>
<a class="{% active request services %}" href="services">Services</a>
<a class="{% active request contact contact2 %}" href="contact">Contact</a>
</div>
<a href="{% url "view:name" %}" {% active_class "view:name" %}>
. Sie können es optional verwenden, um nur den" active"
Wert zu generieren (indem Sie ihnFalse
als zweites Argument an das Tag übergeben), um ihn an ein vorhandenes Klassenattribut anzuhängen. Für die meisten Navigationslinks verwende ich dieses Beispiel.