登录Django后根据用户名将用户重定向到自定义网址

问题描述 投票:0回答:3

喂?我试图重定向一个特定的用户到一个自定义的页面,一旦他们在django登录。管理员将被引导到他们通常的管理界面,而这个特定的用户将转到他们自己的自定义页面。

def custLogin(request):
    if request.user.username == '***':
        return HttpResponseRedirect('http://********************.html')
    else:
        return login(request,template_name='login.html')

我把urls.py中的accountlogin网址指向custLogin,如下所示。

(r'^accounts/login/', custLogin),

然而,我一直收到错误信息

Caught NoReverseMatch while rendering: Reverse for 'django.contrib.auth.views.login' with arguments '()' and keyword arguments '{}' not found.

请大家指点一下?

python django django-urls
3个回答
0
投票

也许,你应该使用 转向 快捷方式,返回一个 HttpResponseRedirect,让你的用户到不同的地方后 custLogin 视图处理。

from django.shortcuts import redirect
def custLogin(request):
    if request.user.is_staff:
        return redirect('/some/admin/url')
    else:
        return redirect('/some/regular/user/url')

正如文档中所说,你可以使用 redirect() 函数有多种方式:通过传递视图名称、对象或url。参见 文件 更多信息

注意,我使用的是 is_staff 用户字段来确定:用户是否是管理员。


0
投票

要将每个用户重定向到他自己的页面,请使用 reverse

首先创建接受参数的url路由。它的描述是 此处

和重定向一样

return HttpResponseRedirect(reverse('arch-summary', args=[1945]))

哪儿 综述 - 命名的网址,并在列表中 琶音 - 的参数。例子 此处

要区分管理员用户和普通用户,请在视图中勾选并重定向到不同的网址。


0
投票

在您的模板中,您可能忘记了在模板的开头做这个。

{% load from future url %}

这是很有用的,当使用。

{% url 'name_of_my_url_inurl.py' %}
© www.soinside.com 2019 - 2024. All rights reserved.