Дать актив классу активной ссылке
Я пишу веб-сайт на Python, созданный на основе фреймворка django, я ищу способ выделить текущую ссылку, на которую ссылается пользователь, в зависимости от того, какой URL-адрес, я подумал, что что-то вроде этого будет работать.
Что я сделал, это создал новое приложение под названием nav
и построил несколько шаблонов, вот так
from django import template
register = template.Library()
URL_PATTERNS = {
'home': (r'^/$',),
}
@register.tag
def nav_selection(parser, token):
try:
tag_name, nav_item = token.split_contents()
except ValueError:
raise template.TemplateSyntaxError, "%r tag requires a single argument" % token.contents.split()[0]
if not (nav_item[0] == nav_item[-1] and nav_item[0] in ('"', "'")):
raise template.TemplateSyntaxError, "%r tag's argument should be in quotes" % tag_name
return NavSelectionNode(nav_item[1:-1])
class NavSelectionNode(template.Node):
def __init__(self, nav_item):
self.nav_item = nav_item
def render(self, context):
if not 'request' in context:
return ""
import re
try:
regs = URL_PATTERNS[self.nav_item]
except KeyError:
return ''
for reg in regs:
if re.match(reg, context['request'].get_full_path()):
return "active"
return ''
В моем шаблоне я делаю это
<ul id="navigation">{% load nav %}
<li><a href="{% url views.home %}" class='{% nav_selection "home" %}'>home</a></li>
<li><a href="{% url views.about %}" class='{% nav_selection "about" %}'>about neal & wolf</a></li>
<li><a href="{% url shop.views.home %}" class='{% nav_selection "shop" %}'>our products</a></li>
<li><a href="{% url shop.views.home %}" class='{% nav_selection "shop" %}'>shop</a></li>
<li><a href="{% url views.look %}" class='{% nav_selection "look" %}'>get the look</a></li>
<li><a href="{% url news.views.index %}" class='{% nav_selection "news" %}'>news</a></li>
<li><a href="{% url contact.views.contact %}" class='{% nav_selection "contact" %}'>contact us</a></li>
<li><a href="{% url store_locator.views.index %}" class='{% nav_selection "finder" %}'>salon finder</a></li>
<li><a href="{% url professional.views.index %}" class='{% nav_selection "contact" %}'>neal & wolf professional</a></li>
</ul>
все же разметка, которую я получаю в firebug, это в этом примере, я просматриваю страницу индекса
<a class="" href="/home/">
Так что, очевидно, что-то не так, но я не вижу, где, кто-нибудь может мне помочь, пожалуйста?
1 ответ
Некоторые вещи, чтобы проверить:
Это request
объект на самом деле в вашем контексте? Вы передаете это конкретно, или вы используете RequestContext
?
Почему вы определяете регулярные выражения в тегах-шаблонах, а не используете встроенные reverse
функция, чтобы искать их в urlconf?
Действительно ли регулярные выражения соответствуют тем, что указаны в urlconf?
Вы включили свой home
urlconf под домашней страницей?