私は上記の110jのクリーン度が好きだったので、そのほとんどを取り、リファクタリングして、3つの問題を解決しました。
- 正規表現は「ホーム」URLを他のすべてのURLと照合していました
- 1つのナビゲーションタブに複数のURLをマッピングする必要があった私はパラメータの変化量をとり、より複雑なタグを必要に応じて、
- いくつかのURLの問題を修正
ここにあります:
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" %}>
。必要に応じて生成するために使用することができ、単に" active"
(渡すことで値をFalse
例は、私が使用するものであることが、ほとんどのナビゲーションリンクのため、既存のクラス属性に追加するタグの2番目の引数として)。