Hallo Django-Kenner,
ich würde gerne direkt auf den Inhalt einer Session-Variable in einer Template-Datei, also der HTML-Seite zugreifen. Geht das? Ich nutze die Django-Version 0.96 und dachte z.B. an folgendes:
In einer view.py-Methode: setzt request.session['artikel'] = 'blaue Schwalbe '
In einer template-Datei: Zugriff auf die Variable über {{ artikel }} oder {{ session.artikel }} um den Inhalt an ensprechender Stelle anzuzeigen.
Mir ist es aber so nicht gelungen den Inhalt anzeigen zu lassen! Erst, wenn ich den Inhalt der Session in einen context übergebe und diesen zum Rendern der Seite benutze kann ich den Inhalt der Session-Variable anzeigen lassen...also render_to_response('seite.html', {'artikel': request.session['artikel'] })
Kann man also den Inhalt von Session-Variablen nicht direkt in Template, bzw. HTML-Seiten benutzen?
Besten Dank schon mal,
Piet
Django: Session-Variable in Template(HTML-Seite) anzeigen
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
So weit ich weiß - nein (zumindest nicht ohne etwas hacken). Was du aber machen kannst ist das gesamte Session-Objekt zu übergeben, und dann auf ``{{ session.artikel }}`` zugreifst.Piet Lotus hat geschrieben:Kann man also den Inhalt von Session-Variablen nicht direkt in Template, bzw. HTML-Seiten benutzen?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Ich würde vorschlagen, einen eigenen context processor einzusetzen, der die Variable "session" in alle Templates zur Verfügung stellt:
Aus einem mir nicht ganz erfindlichen Grund, kopiert "startproject" NICHT die Liste der TEMPLATE_CONTEXT_PROCESSORS, so wie es z.B. für MIDDLEWARE_CLASSES passiert. Daher ist ist dieses praktische Feature nicht so sichtbar und wird gerne übersehen.
Stefan
Code: Alles auswählen
# proj/app/context_processors.py
def session(request):
return {'session': request.session}
# settings.py
...
TEMPLATE_CONTEXT_PROCESSORS = (
'django.core.context_processors.auth',
'django.core.context_processors.debug',
'django.core.context_processors.i18n',
'django.core.context_processors.media',
'proj.app.context_processors.session', # NEU
)
...
# proj/app/views.py
def index(request):
...
return render_to_response('template', RequestContext(request, dict))
Stefan
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Zu bemerken ist an dieser Stelle, dass die Context-Processors nur mit dem RequestContext funktionieren. Da bin ich schon mal drauf reingefallen, der normale Context tut nicht.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- User
- Beiträge: 80
- Registriert: Dienstag 14. November 2006, 10:40
Danke, für die Hilfe...
Ich werde beide Vorschläge mal ausprobieren...
Schöne Grüße,
Piet

Ich werde beide Vorschläge mal ausprobieren...
Schöne Grüße,
Piet
Eine andere Lösung:
Es gibt auch von Django selbst den Template-Context-Processor "django.core.context_processors.request", welcher den gesamten Request im Template verfügbar macht. Einmal hinzufügen und mittels request.session auf deine Session zugreifen.
Es gibt auch von Django selbst den Template-Context-Processor "django.core.context_processors.request", welcher den gesamten Request im Template verfügbar macht. Einmal hinzufügen und mittels request.session auf deine Session zugreifen.