Django – 在设置中使用反向URL映射
django设置文件中的一些选项是url,例如LOGIN_URL
和LOGIN_REDIRECT_URL
。 是否有可能避免硬编码这些url,而是使用反向url映射? 目前,这真是我发现自己在多个地方写同一个url的唯一地方。
Django 1.5及更高版本
从Django 1.5起, LOGIN_URL
和LOGIN_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