在登录Django之后,根据用户名将用户重定向到自定义URL

时间:2012-09-06 12:59:47

标签: python django django-urls

您好?我尝试在django登录后将特定用户重定向到自定义页面。管理员将被引导至他们通常的管理界面,而此特定用户将转到他们自己的自定义页面。 我已经编写了这段代码并将其放在我的观点中

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

我已将urls.py中的accounts / login url指向custLogin,如下所示

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

但我一直收到错误

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

请指点什么?

3 个答案:

答案 0 :(得分:0)

也许,您应该使用redirect快捷方式,它会返回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。有关详细信息,请参阅documentation

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

答案 1 :(得分:0)

您可能忘记了在模板中

{% load from future url %}

在模板开始时,这在使用时很有用:

{% url 'name_of_my_url_inurl.py' %}

答案 2 :(得分:0)

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

首先创建接受参数的url路由。它描述了here

并重定向,如

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

其中 arch-summary - 名为url,列表 args - 参数。示例here

要区分管理员用户与普通用户,请在视图中进行检查并重定向到其他网址。