我想在用户登录他访问的上一页后重定向用户。 我所做的不起作用。
错误
'QueryDict' object has no attribute 'next'
template.html
{% if request.GET.next %}
<form action="{% url "membres.views.login" %}?next={{ request.GET.next }}" method="post" novalidate class="row">
{% else %}
<form action="{% url "membres.views.login" %}?next=/" method="post" novalidate class="row">
{% endif %}
view.py
def login(request):
if request.user.is_authenticated():
return redirect('/')
else:
if request.method == 'POST':
form = LoginForm(request.POST)
if form.is_valid():
username = form.cleaned_data['username']
password = form.cleaned_data['password']
user = authenticate(username=username, password=password)
if user:
if user.is_active:
auth_login(request, user)
user = User.objects.get(username=username)
user_profile = UserProfile.objects.get(user=user)
request.session['user_username'] = username
request.session['user_slug'] = user_profile.slug
messages.success(request, "Connexion réussie")
return redirect(request.GET.next)
else:
messages.error(request, "Vous n'êtes plus autorisé à vous connecter")
else:
messages.error(request, "Votre identifiant et/ou mot de passe n'est pas correct")
else:
form = LoginForm()
return render(request, 'membres/login.html', locals())
知道为什么它不起作用?
感谢您的帮助。
答案 0 :(得分:0)
request.GET
是类似字典的对象,请勿request.GET.next
执行:request.GET["next"]
。
更好的是,考虑一下:request.GET.get('next', '/some_default')
如果以某种方式?next=
丢失,你就不会崩溃。
请注意,这仅适用于到您的视图。在模板中,Django将理解request.GET.next
请注意,您可能会发现在表单中将next
作为hidden
输入传递更为简单(否则您应该逃避?next=...
部分。)