Django:在@login_required 装饰器中使用命名 url
Django: Using named urls in @login_required decorator
我的 Django 应用程序中的大部分 views
使用 @login_required
装饰器。另外,我有三个不同的登录 urls。视图将相应的登录 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
装饰器中使用命名 url 模式而不是硬编码 url 模式?
在 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)
...
更新:reverse
已按照@Alasdair 的建议替换为 reverse_lazy
。参见 docs(第 2 点)。
我的 Django 应用程序中的大部分 views
使用 @login_required
装饰器。另外,我有三个不同的登录 urls。视图将相应的登录 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
装饰器中使用命名 url 模式而不是硬编码 url 模式?
在 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)
...
更新:reverse
已按照@Alasdair 的建议替换为 reverse_lazy
。参见 docs(第 2 点)。