2017-02-18 63 views
0

我想在登录后将用户重定向到主页面。在我的模板,我有这个,Django覆盖自定义登录重定向Url

<a href="{% url 'auth_login' %}?next={% url 'main_page' %}">Login and Work</a> 

的问题是,用户不会被重定向到登录后的首页,settings.LOGIN_REDIRECT_URL将接管和用户重定向到我在设置文件中指定的网址。

我该如何让Django利用我在模板中设置的?next网址,而不是强制使用settings.LOGIN_REDIRECT_URL

回答

1

下面是如何在登录视图中执行此操作的示例。请注意REDIRECT_FIELD_NAME:

def login(request, login_form=AuthenticationForm, template_name='accounts/login.html', 
      extra_context=None): 

    form = login_form() 

    if request.method == 'POST': 
    form = login_form(request.POST, request.FILES) 

    if form.is_valid(): 
     identification, password, remember_me = (form.cleaned_data['identification'], 
               form.cleaned_data['password'], 
               form.cleaned_data['remember_me']) 
     user = authenticate(identification=identification, password=password) 

     if user.is_active: 
     signin(request, user) 

     redirect_to = login_redirect(request.GET.get(REDIRECT_FIELD_NAME), user) 
     return HttpResponseRedirect(redirect_to) 
     else: 
     return redirect(reverse('profile_disabled', kwargs={'username': user.username})) 

    if not extra_context: extra_context = dict() 
    extra_context.update({ 
    'form': form, 
    'next': request.GET.get(REDIRECT_FIELD_NAME), 
    }) 

    return ExtraContextTemplateView.as_view(template_name=template_name, 
              extra_context=extra_context)(request)