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 点)。