2013-05-04 8 views
12

Aus irgendeinem Grund, {{ request.session.session_key }} in der Vorlage zu tun gibt mir einen None Wert. Nach einiger Suche stieß auf this post, die mit request.session._session_id erwähnten aber, dass in der Vorlage gibt mir eine Fehlermeldung:Django 1.5 Sitzungsschlüssel ist keine

Variables and attributes may not begin with underscores: 'request.session._session_key'

Mein Verständnis von Sitzungen in Django ist, dass der Moment ein Benutzer eine Seite (jede Seite) lädt, auch Wenn er anonym ist, wird dieser bestimmten Sitzung eine Session-ID zugewiesen. Ist mein Verständnis falsch und auch, ist das, wo using[SESSION_SAVE_EVERY_REQUEST] kommen soll?

Ich verwende das Datenbank-Backend als meinen Sitzungsspeicher.

Antwort

30

Um meine eigene Frage zu beantworten:

Es ist immer noch möglich, die Sitzungsschlüssel {{ request.session.session_key }} mit zuzugreifen. Die docs erwähnt jedoch, dass eine Sitzung nur erstellt wird, wenn Sie die Sitzung gespeichert/geändert haben.

By default, Django only saves to the session database when the session has been modified – that is if any of its dictionary values have been assigned or deleted:

Also in meinem Fall wurde die Sitzung nicht eingestellt, weil ich es nicht manipulierte. Die Verwendung von SESSION_SAVE_EVERY_REQUEST löst das Problem tatsächlich global. In meinem Anwendungsfall, ich brauchte es nur auf eine bestimmte Ansicht-Funktion, so dass es eine einfache Sache war, dies zu tun:

if not request.session.get('has_session'): 
    request.session['has_session'] = True 
+0

Schöne kleine Leckerbissen. –

Verwandte Themen