我的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
装饰器中使用命名网址模式而不是硬编码网址模式?
答案 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(第二点)。