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