2 Stimmen

Django: Informationen aus URLs erfasst in Template-Dateien verfügbar?

Gegeben:

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

in einer urls.py-Datei. (Sollte es 'archive_year' sein statt anstelle von 'year_archive' sein? - siehe unten).

Ist es möglich, Informationen aus der URL zu erfassen? Abgleichs (in diesem Fall der Wert von "Jahr") zur Verwendung im dem optionalen Wörterbuch? Z.B.: der Wert von Jahr statt 'bar'?

Das Ersetzen von "bar" durch "Jahr" ergibt: "NameError ... Name 'Jahr' ist nicht definiert".

Das obige ist nur ein Beispiel; ich weiß, dass die Jahreszahl in der HTML-Datei der Vorlage für archive_year vorhanden ist, aber das ist nicht der Fall für archive_month. Und es könnten in der URL benutzerdefinierte Informationen enthalten sein, die in einer HTML-Vorlagendatei benötigt wird.

(Das Beispiel stammt von der Seite "URL-Dispatcher", Abschnitt "Übergabe von Übergabe zusätzlicher Optionen an Ansichtsfunktionen", http://docs.djangoproject.com/en/dev/topics/http/urls/ , in der Django-Dokumentation).

4voto

cdleary Punkte 66512

Nein, das ist nicht möglich innerhalb der URLConf - der Dispatcher hat einen festen Satz von Dingen, die er tut. (Es nimmt die Gruppe Wörterbuch von Ihrem Regex-Match und übergibt es als Schlüsselwort-Argumente an Ihre Ansicht-Funktion.) Innerhalb Ihrer (benutzerdefinierten) Ansicht Funktion, sollten Sie in der Lage sein, zu manipulieren, wie diese Werte in den Template-Kontext übergeben werden.

Das Schreiben einer benutzerdefinierten Ansicht, um das Jahr auf "foo" abzubilden, würde mit dieser URLConf wie folgt aussehen:

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

Der Grund dafür, dass Sie eine NameError in dem von Ihnen beschriebenen Fall ist, weil Python nach einem Bezeichner namens year im umgebenden Bereich, und es existiert dort nicht - es ist nur eine Teilzeichenkette im Regex-Muster.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X