redirect_field_name DJANGO没有工作

时间:2017-10-23 09:42:27

标签: python django

我会将用户重定向到" admin"页面,如果他是超级用户,否则正常"个人资料"但它没有工作

urls.py

 url(r'^user/login/', LoginUserView.as_view(), name='login'),
 url(r'^user/profile/', UpdateUserView.as_view(), name='profile'),
 url(r'^user/admin/$', UpdateAdminView.as_view(), name='admin'),

views.py

class LoginUserView(auth_views.LoginView):
    template_name = "Login/login.html"
    #TODO
    def dispatch(self, request, *args, **kwargs):
        if self.request.user.is_superuser:
            self.redirect_field_name = reverse_lazy("admin")
        else:
            self.redirect_field_name = reverse_lazy("profile")
        return super(LoginUserView, self).dispatch(request, *args, **kwargs)

2 个答案:

答案 0 :(得分:1)

设置redirect_field_name不起作用 - 它是参数的名称,默认为'next',而不是重定向到的网址。

如果您想要成功网址,则应覆盖get_success_url

class LoginUserView(auth_views.LoginView):
    template_name = "Login/login.html"
    def get_success_url(self):
        url = self.get_redirect_url()
        if url:
            return url
        elif self.request.user.is_superuser:
            return reverse("admin")
        else:
            return reverse("profile")

方法开头的get_redirect_url()调用意味着尝试使用重定向字段的默认行为仍然有效。

答案 1 :(得分:0)

中缺少“e”:

self.redirect_field_name = reverse_lazy(“profile”)