2009-07-06 7 views
1

Gegeben:Django: Informationen aus URLs, die in Vorlagendateien verfügbar sind?

urlpatterns = \ 
    patterns('blog.views',            
     (r'^blog/(?P<year>\d{4})/$', 'year_archive', {'foo': 'bar'}), 
    ) 

in einer urls.py Datei. (Sollte es sein ‚archive_year‘ statt von ‚year_archive‘ - siehe unten Ref.)

Ist es möglich, Informationen aus der URL Anpassung (der Wert von „Jahr“ in diesem Fall) zu erfassen für den Einsatz in das optionale Wörterbuch ?. ZB: der Wert des Jahres statt 'bar'?

Ersetzen von 'bar' mit Jahr resultiert in: "NameError ... Name 'Jahr' ist nicht definiert".

Das obige ist nur ein Beispiel; Ich weiß, dass Jahr ist in der Vorlage HTML-Datei für archive_year, verfügbar, aber das ist nicht der Fall für archive_month. Und dort könnte benutzerdefinierte Informationen in der URL, die in einer Vorlage HTML-Datei benötigt wird.

(Das Beispiel ist von Seite "URL Dispatcher", Abschnitt "Passing zusätzliche Optionen Funktionen anzuzeigen", http://docs.djangoproject.com/en/dev/topics/http/urls/, in der Django-Dokumentation.)

+0

Sie haben einen Syntaxfehler im Schnipsel - fehlendes offenes Zitat in Zeile 2. Auch (FYI) benötigen Sie keine Zeilenfortsetzungszeichen, wenn Sie sich innerhalb eines Klammerausdrucks befinden (Zeilen 2 und 3). – cdleary

+0

Danke. Wurde jetzt behoben. –

Antwort

4

Nein, das innerhalb des URLconf nicht möglich ist - Der Dispatcher hat eine festgelegte Menge von Dingen, die er tut. (Es nimmt das Gruppenwörterbuch aus Ihrer regulären Übereinstimmung und übergibt es als Schlüsselwortargumente an Ihre Ansichtsfunktion.) Innerhalb Ihrer (benutzerdefinierten) Ansichtsfunktion sollten Sie in der Lage sein zu manipulieren, wie diese Werte in den Vorlagenkontext übergeben werden.

eine benutzerdefinierte Ansicht Schreiben Jahr zur Karte zu „foo“ angesichts dieser URLconf würde wie etwas sein:

def custom_view(request, year, foo): 
    context = RequestContext(request, {'foo': year}) 
    return render_to_response('my_template.tmpl', context) 

Der Grund, dass Sie eine NameError im Fall erhalten Sie beschreiben, ist, weil Python sucht eine Kennung mit dem Namen im umgebenden Gültigkeitsbereich und sie existiert dort nicht - es ist nur ein Teilstring im Regex-Muster.

+0

+1: Das ist, was View-Funktionen sind - Zuordnung von entsprechenden Teilen der Anfrage zu etwas, das in der Vorlage gerendert wird. –

+0

Als Abkürzung für die Übergabe aller Variablen können Sie auch 'localhosts()' verwenden: 'context = RequestContext (request, locals())' Das ist ziemlich gefährlich, da jede lokale Variable übergeben wird, aber es kann eine gute Abkürzung. –

+0

Ich bin kein großer Fan von "langsam und gefährlich". ;-) – cdleary

Verwandte Themen