【问题标题】:Setting a default value in session if key does not exist如果键不存在,则在会话中设置默认值
【发布时间】:2017-06-24 02:30:49
【问题描述】:

我想从会话中获取一个值,如果该值不存在,我想提供一个默认值。我从here 得到了我目前的方法。这就是我正在做的事情

fav_color = request.session.get('fav_color', 'red')

以上工作正常,但是我注意到如果将关键变量放在 settings.py 中,则输出为 None。我想解决这个问题。例如,这是在我的 settings.py 中

VARIABLE_PATIENT_ID_DEFINE="patientID"

现在在其他一些应用程序中,我正在这样使用它

    t = "somevar"
    s = settings.VARIABLE_PATIENT_ID_DEFINE
    print(s) # prints patientID
    fav_color = request.session.get(s, 'red') --->After this line Default is None
    fav_color = request.session.get(t, 'red') --->After this line Default is red

我的问题是为什么

fav_color = request.session.get(s, 'red')

失败并且没有返回?为什么从settings.VARIABLE_PATIENT_ID_DEFINE 分配会导致问题

【问题讨论】:

    标签: django session


    【解决方案1】:

    如果request.session 已经包含{"patientID": None} 然后执行request.session.get("patientID", "red") 也将返回None,因为这是patientID 键的值。

    如果密钥在会话中根本不存在,您只会得到"red",而这里似乎不是这种情况。

    你可以通过写作来解决你的问题

    fav_color = request.session.get(s, 'red') or 'red'

    【讨论】:

    • 会话不包含一个名为 PatientID 的键,为什么当它应该返回红色时它没有返回。它在第二种情况下返回红色,但在第一种情况下不返回。在这两种情况下它都会返回红色
    • 你能print dict(request.session) 吗?输出是什么?很确定你会在那里找到它
    • 是的,它在里面。感谢您清除它。你能告诉我 dict(request.session) 做什么吗?我已经认为 request.session 是一本字典 dict(request.session) 做什么?
    • 会话属性是一个类似字典的对象。它的行为类似于字典,但有一些额外的功能和属性。 dict(request.session) 将会话转换为普通的 python 字典。使用会话时,您不需要这样做。我只是建议将其用于调试目的
    • 是的,我知道,但我喜欢这种方法。感谢您清除此问题
    猜你喜欢
    • 2012-03-22
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-15
    • 1970-01-01
    • 2011-02-05
    相关资源
    最近更新 更多