Python Django-在设置中使用反向url映射

Python Django-在设置中使用反向url映射,python,django,url,dry,Python,Django,Url,Dry,django设置文件中的一些选项是URL,例如LOGIN\u URL和LOGIN\u REDIRECT\u URL。是否可以避免硬编码这些url,而是使用反向url映射?目前,这是我发现自己在多个地方编写相同URL的唯一地方。Django 1.5及更高版本 从Django 1.5开始,LOGIN\u URL和LOGIN\u REDIRECT\u URL接受命名的URL模式。这意味着您不需要在设置中硬编码任何URL LOGIN_URL = 'login' # name of url patter

django设置文件中的一些选项是URL,例如
LOGIN\u URL
LOGIN\u REDIRECT\u URL
。是否可以避免硬编码这些url,而是使用反向url映射?目前,这是我发现自己在多个地方编写相同URL的唯一地方。

Django 1.5及更高版本 从Django 1.5开始,
LOGIN\u URL
LOGIN\u REDIRECT\u URL
接受命名的URL模式。这意味着您不需要在设置中硬编码任何URL

LOGIN_URL = 'login'  # name of url pattern
对于Django 1.5-1.9,您也可以使用view函数名,但不建议使用此名称,因为Django 1.8中不推荐使用此名称,并且在Django 1.10+中不起作用

LOGIN_URL = 'django.contrib.auth.views.login' # path to view function
Django 1.4 对于Django 1.4,您可以使用

Django 1.3及更早版本 这是最初的答案,在Django中添加了
reverse\u lazy
之前,它是有效的

在URL.py中,导入设置:

from django.conf import settings
然后添加url模式

urlpatterns=('',
    ...
    url('^%s$' %settings.LOGIN_URL[1:], 'django.contrib.auth.views.login', 
        name="login")
    ...
)
请注意,您需要切片
LOGIN\u URL
以删除前导正斜杠

在外壳中:

>>>from django.core.urlresolvers import reverse
>>>reverse('login')
'/accounts/login/'

在django开发版本中,reverse_lazy()成为一个选项:

我对此表示怀疑,因为
settings.py
是在URL模块之前加载的。不过我很想知道。很好的问题。啊,好的解决方法,我没有考虑从设置-> URL,只是另一种方式。1如果django应用程序部署在example.com/root而不是example.com/?@gozzilli上,您能否避免对django root进行硬编码,以便/accounts/login解析为/root/accounts/login?从django 1.4开始,我将使用
reverse\u lazy
而不是导入
设置。login\u URL
到URL中。我已经更新了答案。对于使用Django 2.1的我来说,名为URL模式的登录URL重定向不起作用。它给我一个404错误和{'path':'name\u of_url'}。有什么变化吗?在文档中我找不到任何东西。@托比特请提出新问题,您没有提供足够的信息来说明问题所在。Django 2.1中不应该有任何影响这一点的更改。它计划在2012年3月发布te 1.4
>>>from django.core.urlresolvers import reverse
>>>reverse('login')
'/accounts/login/'