我想在我的网站上查看要求用户登录。
@login_required
def checkout(request, campaign_id, artist_id, default_amount):
这正确地将用户重定向到视图"登录"如果用户在尝试访问视图时未登录:
def login(request):
if request.method == 'POST':
username = request.POST['usermail']
password = request.POST['password']
redirect = request.POST['next']
user = authenticate(username = username, password = password)
if user is not None:
if user.is_active:
auth_login(request, user)
return HttpResponseRedirect(redirect)
else:
return render(request, 'login.html')
else:
return render(request, 'login.html')
return render(request, 'login.html')
我想要做的是将用户发送到登录后最初请求的页面...但是,我似乎无法访问模板中的{{next}}变量。
<input type="hidden" name="next" value="{{ next }}" />
当我查看呈现的页面源代码时,它没有获得&#34; next&#34;的值:
<input type="hidden" name="next" value=""/>
即使URL确实具有该值:
http://127.0.0.1:8080/login/?next=/campaign/the-slowdown/vote-for/cut-copy/25
答案 0 :(得分:1)
要访问模板中的next
变量,您必须通过render
函数传递该变量。在您的视图中,添加以下内容:
context = {'next': request.GET['next'] if request.GET and 'next' in request.GET else ''}
return render(request, 'login.html', context)
然后,您{{ next }}
将出现在您的模板中,就像在您的网址中一样。
此外,您可以删除else: return render(request, 'login.html')
,因为它们已过时。
答案 1 :(得分:1)
要访问模板中的请求变量,您需要使用请求上下文处理器,因此:
在setttings.py中:
TEMPLATE_CONTEXT_PROCESSORS = (
...
'django.core.context_processors.request',
...
)
然后在您的模板中,您可以访问下一个var:
{{ request.GET.next }}
虽然我会在视图中实现这种逻辑,然后在上下文中分配,而不是像模板中那样访问它。