2009-11-22 15 views
11

Ich habe versucht, die URL Template-Tag in django zu verwenden, aber ohne Glück,url Template-Tag in django Vorlage

definiert ich meine urls.py wie diese

urlpatterns = patterns('', 
    url(r'^analyse/$',    views.home, name="home"), 
    url(r'^analyse/index.html',  views.index, name="index"), 
    url(r'^analyse/setup.html',  views.setup, name="setup"), 
    url(r'^analyse/show.html',  views.show, name="show"), 
    url(r'^analyse/generate.html', views.generate, name="generate"), 

ich das URL-Muster definiert in meiner Ansicht nach wie dieser

{% url 'show'%} 

dann bekam ich diese Fehlermeldung

Eine Ausnahme beim Rendern abgefangen: Reverse für '' show '' mit Argumenten '()' und Schlüsselwortargumente '{}' nicht gefunden.

Original-Traceback (jüngste Aufforderung zuletzt): Datei "/Library/Python/2.5/site-packages/django/template/debug.py", Linie 71, in render_node result = node.render (Kontext) Datei "/Library/Python/2.5/site-packages/django/template/defaulttags.py", Linie 155, übertragen sie in nodelist.append (node.render (Kontext)) Datei „/ Library/Python/2.5/site-packages/django/template/defaulttags.py ", Zeile 382, ​​in render Raise e NoReverseMatch: Reverse für '' show '' mit Argumenten '()' und Schlüsselwort Argumente '{}' nicht gefunden.

Ich wundere mich, warum Django nicht rendern konnte? Was ist der richtige Weg, um es in der Tempalte zu definieren?

Antwort

0

Für was es wert ist, hatte ich das gleiche Problem und während ich mich nicht an den Grund erinnere, warum jetzt, löste dies für mich. Beispiel aus einer SCRUM App, an der ich gerade arbeitete.

url(r'^$', 'scrum.views.index', name='scrum-index'), 
10

Das Problem ist Ihre Anführungszeichen rund um "Show". Ändern Sie dies in "show" und es sollte für Sie funktionieren.

Siehe here

+1

Es ist nie für mich gearbeitet, mit einfachen oder doppelten Anführungszeichen. Das Entfernen der Zitate funktioniert, es ist seltsam. 1.5 arbeitet mit doppelten Anführungszeichen. –

+0

Einfache Anführungszeichen funktionieren gut, Django 1.6. Stellen Sie sicher, dass Sie Ihre Parameter * außerhalb * der Anführungszeichen setzen! Nahm mich für immer, um diesen Fehler zu finden, erzeugte das Vorlagensystem glücklich leere URLs ohne Fehleranzeige. – Bogatyr

1

Sie müssen möglicherweise ein wenig präziser, auf dem zu sehen Ihnen zu verwendende versuchen:

{% url appname.views.show %} 
+0

Ich versuche, über diese Funktion zu lernen - wie heißt es? Ich habe die Dokumentation von Django-Project über Templates durchsucht und sie erwähnen '{% url ....}' ' – CodyBugstein

3

Sie haben vielleicht einige Ansichten noch nicht implementiert. Es sieht so aus, als ob die Vorlagen-Engine versucht, alle Aufrufe aus den Mustern in urls.py zu finden, wenn der Filter {% url ...%} verwendet wird.

Es zeigt normalerweise einen Fehler für Ihr letztes Muster in urls.py.

Versuchen Sie, jedes URL-Muster zu kommentieren, das Sie noch nicht implementiert haben.

Auch stellen Sie sicher, dass Sie den vollständigen Pfad verwenden:

{% url myapp.views.home %} 

Die URL-Vorlage Filter sieht wirklich instabil. Versuchen Sie, future compatibility zu behalten.

12

WICHTIG: Dies war für Django 1.4. Bei django 1.5 ist es genau umgekehrt.

Versuch mit URL-Namen ohne Anführungszeichen

{% url show %} 

nicht diese

{% url 'show'%} 
+5

Schlechte Idee. Diese Art der Verwendung des URL-Vorlagen-Tags ist veraltet und wird in Django 1.5 nicht funktionieren. – glarrain

+0

Ja, das ist wahr;) Ich sollte bearbeiten :) – iskorum