执行此装饰器@login_required
的基本方法是这样的;
@login_required(login_url='/path/to/login/')
def foobar(request):
# do stuff
在此,我想将login_url
的此值设置为request.GET.next
的动态路径。我可以吗?
更新,我尝试了这个,但当然这应该返回错误(request)
未定义,因为在争论之前采取。
def dynamic_url(request):
get_next = request.GET.get('next')
if get_next:
return get_next
return '/accounts/login/'
@login_required(login_url=dynamic_url(request))
def foobar(request):
# do stuff
答案 0 :(得分:0)
我认为有两种方法可以做到这一点:
第一个不是要使用装饰器并在视图函数中检查你的状态,如下所示:
def foo(request):
if not request.user.is_authenticated:
# Do your staffs
# get_next = request.GET.get('next')
# if get_next:
# return get_next
# return ''
第二方式是我未测试过的方式: 我可以看到here django login_requred()装饰器可以获得一个名为 function 的变量,并将装饰器响应传递给此函数(如果不是None)尝试将 dynamic_url 函数传递给login_required()装饰器,如下所示:
login_required(function=dynamic_url)
def foo(request):
pass
并告诉我们结果:)