Django:在@login_required装饰器中使用命名url

时间:2015-07-17 01:13:56

标签: django decorator url-pattern

我的django应用中的大多数views使用@login_required装饰器。另外,我有三个不同的登录网址。视图将相应的登录URL硬编码到其@login_required装饰器中。

@login_required('myapp/logintype1'):
def usertype1_home(request):
    # Further dode
    # ...


@login_required('myapp/logintype2'):
def usertype2_home(request):
    # Further code
    # ...

由于此类视图的数量非常大,每当我更改urls.py中的登录URL时,我必须在所有装饰器中更改login-url。我想使用{% urls 'urlpatter1' %}{% urls 'urlpatter2' %}之类的内容。我可以使用reverse吗?

如何在@login_required装饰器中使用命名网址模式而不是硬编码网址模式?

1 个答案:

答案 0 :(得分:1)

views.py语句之后import ...的顶部某处添加类似

的内容
login_type1 = reverse_lazy('urlpatter1') # or LOGIN_TYPE1
login_type2 = reverse_lazy('urlpatter2') # or LOGIN_TYPE2

稍后使用这些变量

@login_required(login_url=login_type1)
...

更新:@ {Alsdair建议将reverse替换为reverse_lazy。见docs(第二点)。