由于某些原因,在模板中执行{{ 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

08-04 09:13