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

时间:2009-10-05 04:40:49

标签: python django url dry

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

2 个答案:

答案 0 :(得分:53)

Django 1.5及更高版本

从Django 1.5开始,LOGIN_URLLOGIN_REDIRECT_URL接受命名的URL模式。这意味着您无需在设置中对任何网址进行硬编码。

LOGIN_URL = 'login'  # name of url pattern

对于Django 1.5 - 1.9,您也可以使用视图函数名称,但不建议这样做,因为它在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

然后添加网址格式

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/'

答案 1 :(得分:13)

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