2013-05-04 15 views
12

Z jakiegoś powodu zrobienie w szablonie {{ request.session.session_key }} daje mi wartość None. Po pewnym poszukiwań natknąłem this post że wspomnianym użyciu request.session._session_id ale używając, że w szablonie daje mi błąd:Klucz sesji Django 1.5 jest pusty

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

Moje rozumienie sesji w Django jest, że moment użytkownik załaduje stronę (każda strona), nawet jeśli jest anonimowy, identyfikator sesji jest przypisany do tej konkretnej sesji. Czy moje zrozumienie jest błędne, a także czy jest to miejsce, w którym powinien się pojawić using[SESSION_SAVE_EVERY_REQUEST]?

Używam zaplecza bazy danych jako mojego magazynu sesji.

Odpowiedz

30

Aby odpowiedzieć na moje własne pytanie:

nadal jest możliwe, aby uzyskać dostęp do klucza sesyjnego za pomocą {{ request.session.session_key }}. Jednak docs wspomina, że ​​sesja zostanie utworzona tylko wtedy, gdy zapisałeś/zmodyfikowałeś sesję.

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:

W moim przypadku sesja nie była ustawiona, ponieważ nie manipulowałem nią. Korzystanie z SESSION_SAVE_EVERY_REQUEST rzeczywiście rozwiąże problem globalnie. W moim przypadku użycia, potrzebowałem go tylko do określonej funkcji widoku, więc była to prosta sprawa:

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

Przyjemny mały kąsek. –