2011-01-16 3 views
1

Hallo ich fange an, Django zu lernen.Menü in Django

Ich habe eine einfache Menü-Liste

{% block menu %} 
    <ul> 
    {% for item in list %} 
    <li><a href="{{item}}/">{{ item }}</a></li> 
    {% endfor %} 
    </ul> 
{% endblock %} 

und eine Liste zb

MENU = ['Home','Contact','About'] 

Wenn ich drücke Kontakt an die Adresse geht dann 127.0.0.1:8000/Contact mit dieser gleichen Schablone, aber wenn ich wieder Kontakt auf Ich bin immer Seite nicht gefunden 127.0.0.1:8000/Contact/ Kontakt

Was kann ich dagegen tun?

Entschuldigung für mein Englisch.

Antwort

6

Das besondere Problem hier ist, dass das HTML, das Sie emittieren, Links zu "Kontakt /" hat. Wenn Sie bereits an einer/Kontakt-URL sind, gehen Sie zu einem/Kontakt/Kontakt, wie Sie hier sehen.

Die schnelle Lösung ist ein/rechts vor dem {{item}}, wie diese hinzu:

<li><a href="/{{item}}/">{{ item }}</a></li> 

jedoch django bessere Möglichkeiten zu behandeln URLs hat, als sie selbst zu schaffen. Sehen Sie sich die URL-Dispatcher-Dokumentation [1] an, um das URL-Template-Tag [2] verwenden zu können.

Was diese Zeile wie dann ist so etwas am Ende aussehen würde:

<li><a href="{% url item %}">{{ item }}</a></li> 
  1. [1] http://docs.djangoproject.com/en/dev/topics/http/urls/
  2. [2] http://docs.djangoproject.com/en/1.2/ref/templates/builtins/#url
0

Verwenden absolute Pfade, zum Beispiel:

MENU = [{'text':'Home', 
    'url':'/home'}, 
    {'text':'Contact', 
    'url':'/contact'}, 
    {'text':'Home', 
    'url':'/home'}] 

Und Code wie folgt:

{% block menu %} 
    <ul> 
    {% for item in list %} 
    <li><a href="{{url}}/">{{ text }}</a></li> 
    {% endfor %} 
    </ul> 
{% endblock %} 

Aber bessere Lösung wäre, ein bereit CMS App zu nutzen, zum Beispiel von hier django resources page wie django- cms (django-cms.org).

1

Versuchen href="{{item}}" zu href="/{{item}}" Wechsel:

(% block menu %} 
    <ul> 
    {% for item in list %} 
    <li><a href="/{{item}}/">{{ item }}</a></li> 
    {% endfor %} 
    </ul> 
{% endblock %} 

Sie haben eine relative URL verwendet, die nicht funktioniert, wenn Sie sich auf einer anderen Ebene des URL-Pfads befinden.