我使用下面的上下文处理器将上下文传递给我的所有页面,除非用户没有登录,在这种情况下,它会将他带到登录页面:
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
是我没有找对地方,还是有办法用别的东西代替重定向?
3条答案
按热度按时间wz3gfoph1#
不能简单地从上下文处理器返回重定向,因为上下文处理器需要返回上下文变量的dict。
如果在上下文处理器中确实需要此功能,则需要
(as顺便说一句,我已经写了一个包,这样做-
django-safespace
)相反,如果可以的话,使用
login_required
装饰器(或CBV mixin -请参阅链接文档)使整个视图仅为登录用户。brgchamk2#
最近我也遇到了类似的问题,在一个基于类的视图中,方法
get_context_data
,如果不满足某些条件,我需要引发一个Exception,并触发一个重定向(同时使用django.messages显示一个错误消息)。我得到这个错误:
字符串
我解决了
get_context_data
方法可以引发错误(此处不捕获)型
享受.
k7fdbhmy3#
编辑:上面的回答假设了其他的东西,所以我删除了它,并详细说明了为什么返回重定向不起作用,以防你想理解
字符串
这应该会导致你得到的同样的错误。明白了吗?