【问题标题】:Context processors, passing a session which doesn't exist上下文处理器,传递一个不存在的会话
【发布时间】:2011-05-07 11:44:17
【问题描述】:

Hay All,我有一个简单的上下文处理器,它会在会话中查找“用户”键是否存在。如果是,我想将其返回到模板。

这是我的上下文处理器

def get_user_details(request):
    user = request.session['user']
    data = {
        'user':user
    }
    return data

这是一个示例视图

def render_home(request):
    return render_to_response("home", context_instance=RequestContext(request))

如果 session['user'] 不存在,我希望它静默失败,或者返回 False 或 Null。

因为会话中不存在密钥,所以我得到一个 KeyError。

知道如何解决这个问题吗?

【问题讨论】:

    标签: python django session


    【解决方案1】:

    您可以通过这种方式获得像None 这样的默认值:request.session.get('user', None)。就像在普通的 Python 字典中一样。

    【讨论】:

    • 这是最好的解决方案,它还将上下文处理器减少到 3 行。谢谢!
    【解决方案2】:
    user = request.session.get('user', None)
    

    或者,

    user = None
    if 'user' in request.session:
        user = request.session['user']
    

    【讨论】:

    • 最上面的是我用的,可惜THC4k先到了,还是谢谢。
    【解决方案3】:
    def get_user_details(request):
        try:
            user = request.session['user']
        except KeyError:
            return
        data = {
            'user':user
        }
        return data
    

    或者,如果您想在更远的地方抓住它,请改为这样做:

    def render_home(request):
        try:
            return render_to_response("home", context_instance=RequestContext(request))
        except KeyError:
            return
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-19
      相关资源
      最近更新 更多