在@login_required装饰器中使用命名URL

时间:2014-03-25 20:25:31

标签: django

我正在为登录页面使用自定义URL。然而,Django的@login_required装饰师将我带到accounts/login

我看到这个装饰器的第3个参数是你未登录时所使用的URL。现在我想将urls.py中的值传递给这个装饰器:

@login_required(login_url=myapp.urls.my_url_name)

显然这不起作用,但有一些替代语法让我实现这一目标吗?或者,是否有一个全局变量,我只能设置一次,并覆盖login_url参数?

2 个答案:

答案 0 :(得分:1)

您可以通过在LOGIN_URL全局设置settings.py来指定未登录的用户将被重定向到的用户名。 (当然,如果你愿意,也可以在应用装饰器的地方覆盖那个设置。)

根据文档,您还可以指定命名网址格式,例如LOGIN_URL = 'myapp:login',并查看函数名称,例如LOGIN_URL = 'myapp.login_view'

来自the docs

  

<强> LOGIN_URL

     

默认值:'/accounts/login/'

     

重定向请求以进行登录的URL,尤其是在使用login_required()装饰器时。

     

此设置还接受视图函数名称和命名的URL模式,这些模式可用于减少配置重复,因为您不必在两个位置(设置和URLconf)定义URL。

供参考:

答案 1 :(得分:0)

您可以在settings.py文件中将站点的登录URL设置为LOGIN_URL。然后,你不必担心在不同的地方改变它。