出于某种原因,在模板中执行{{ request.session.session_key }}
会给出None
值。经过一些搜索后,遇到了使用request.session._session_id
提到的this post,但在模板中使用它会给我一个错误:
变量和属性不能以下划线开头: ' request.session._session_key'
我对Django中会话的理解是,当用户加载页面(任何页面)时,即使他是匿名的,也会将session_id分配给该特定会话。我的理解是错的吗?这是using [SESSION_SAVE_EVERY_REQUEST]
应该出现的地方吗?
我使用数据库后端作为我的会话存储。
答案 0 :(得分:30)
回答我自己的问题:
仍然可以使用{{ request.session.session_key }}
访问会话密钥。但是,docs提到只有在您保存/修改会话时才会创建会话。
默认情况下,Django仅在会话时保存到会话数据库 已修改 - 即它的任何字典值已被修改 已分配或删除:
所以在我的情况下,会话没有被设置,因为我没有操纵它。使用SESSION_SAVE_EVERY_REQUEST
确实可以解决全球问题。在我的用例中,我只需要在特定的视图函数上使用它,这样做很简单:
if not request.session.get('has_session'):
request.session['has_session'] = True