Django – 在设置中使用反向URL映射

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

Django 1.5及更高版本

从Django 1.5起, LOGIN_URLLOGIN_REDIRECT_URL接受指定的URL模式。 这意味着你不需要在你的设置中硬编码任何url。

 LOGIN_URL = 'login' # name of url pattern 

对于Django 1.5 – 1.9,您也可以使用视图函数名称,但不build议这样做,因为它在Django 1.8中不推荐使用,并且在Django 1.10+中不起作用。

 LOGIN_URL = 'django.contrib.auth.views.login' # path to view function 

Django 1.4

对于Django 1.4,你可以使用reverse_lazy

 LOGIN_URL = reverse_lazy('login') 

Django 1.3及更早的版本

这是原来的答案,在reverse_lazy被添加到Django之前工作

在urls.py中,导入设置:

 from django.conf import settings 

然后添加url模式

 urlpatterns=('', ... url('^%s$' %settings.LOGIN_URL[1:], 'django.contrib.auth.views.login', name="login") ... ) 

请注意,您需要切片LOGIN_URL以删除前导正斜杠。

在shell中:

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

在Django的开发版本reverse_lazy()成为一个选项: https : //docs.djangoproject.com/en/dev/ref/urlresolvers/#reverse-lazy