微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Django上下文处理器在重定向时抛出错误

如何解决Django上下文处理器在重定向时抛出错误

我正在使用以下上下文处理器将上下文传递给我的所有页面,除非用户登录在这种情况下会将他带到登录页面

from django.conf import settings
from .models import foo
from django.shortcuts import redirect


def globalVar(request):
    if not request.session.get('user_id') is None:
        return {"foo": foo}
    else:
        return redirect('login')

但是重定向导致了一个异常,我没有找到解决方法ValueError: dictionary update sequence element #0 has length 0; 2 is required

我是不是找对地方了,或者有没有办法用其他东西代替重定向

解决方法

编辑:上面的答案假设了其他东西,所以我已经删除并替换为详细说明为什么返回重定向不起作用,以防万一您想了解

context = {}
redirect = redirect('login')
context.update(redirect)

这应该会导致您遇到的相同错误。有想法吗?

,

您不能简单地从上下文处理器返回重定向,因为上下文处理器需要返回上下文变量的字典。

如果你真的需要上下文处理器中的这个功能,你需要

  • 定义自定义异常类(例如包装响应)
  • 从上下文处理器中引发这样的异常(因为您不能返回非字典)
  • 在 Django 中间件中捕获自定义异常,解开响应并返回它

(顺便说一句,我写了一个包来做到这一点 - django-safespace

相反,如果可以,请使用 login_required 装饰器(或 CBV mixin – 请参阅链接的文档)使您的整个视图仅供登录用户使用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。