Python Django-在设置中使用反向url映射
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
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/'