Frage

Ich bin eine Python-Website auf der Rückseite des django Rahmen gebaut Schreiben, ich nach einer Möglichkeit, die aktuelle Verbindung markieren die Benutzer auf depening auf dem, was die URL, dachte ich so ein Ding zu tun funktionieren würde.

Was ich getan habe ist eine neue Anwendung namens nav erstellen und gebaut einige templatetags, wie so,

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

In meiner Vorlage ich das

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

noch das Markup ich in Firebug raus ist dies in diesem Beispiel mir die Index-Seite bin gerade

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

So Unterlassungen ist offensichtlich, aber ich kann nicht sehen, wo jemand kann mir helfen, bitte?

War es hilfreich?

Lösung

Einige Dinge zu überprüfen:

Ist das request Objekt tatsächlich in Ihrem Kontext? Sind Sie es in speziell vorbei, oder verwenden Sie eine RequestContext?

Warum definieren Sie reguläre Ausdrücke in Ihrem templatetags, anstatt mit der eingebauten in reverse Funktion sie in der URLconf zu sehen?

Hat die regulären Ausdrücke hier eigentlich die, die in den URLconf Vorstellungen?

Haben Sie Ihre home URLconf unter der 'Heimat' url enthalten irgendwie?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top