나는 위의 110j의 청결 함이 마음에 들었 기 때문에 대부분을 가져 와서 내가 가진 세 가지 문제를 해결하기 위해 리팩토링했습니다.
- 정규식이 '홈'URL을 다른 모든 URL과 일치 시켰습니다.
- 하나의 탐색 탭에 매핑 된 여러 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
기존 클래스의 속성에 추가 할 태그에 두 번째 인수로)하지만, 대부분의 탐색 링크에 대한 예는 내가 사용하는 것입니다.