2009-12-11 6 views
0

Je suis en train d'écrire un site web python construit à l'arrière du framework django, je cherche un moyen de mettre en évidence le lien actuel que l'utilisateur est en train de passer sur ce que l'URL quelque chose comme ça fonctionnerait.donner un actif à la classe au lien actif

Ce que je l'ai fait est de créer une nouvelle application appelée nav et construit quelques templatetags, comme si,

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 '' 

Dans mon modèle Je le fais encore le balisage

<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 &amp; 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 &amp; wolf professional</a></li> 

      </ul> 

Je sors dans firebug est-ce dans cet exemple, je suis la page d'index

<a class="" href="/home/"> 

Quelque chose échoue évidemment mais je ne peux pas voir où, quelqu'un peut-il m'aider s'il vous plaît?

Répondre

0

Quelques choses à vérifier:

est l'objet request réellement dans votre contexte? Le transmettez-vous spécifiquement ou utilisez-vous un RequestContext? Pourquoi définissez-vous des regex dans vos templates de templates, plutôt que d'utiliser la fonction intégrée reverse pour les rechercher dans l'urlconf?

Les expressions rationnelles correspondent-elles à celles de l'urlconf?

Est-ce que vous avez inclus votre home urlconf sous l'URL 'home'?

+0

Désolé je suis vraiment épais quand il s'agit de python, seulement le faire environ 2 semaines, est-ce une bonne façon de le faire? Ce n'est pas mon code, j'en ai hérité, y a-t-il un moyen plus simple? Comment puis-je voir ce qui est dans l'objet de requête? Quand je rends_to_response mon dernier paramètre est RequestContext, c'est ce que vous voulez dire? Désolé d'être stupide. – Udders