40

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

4

2 回答 2

58

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

姜戈 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以删除前导正斜杠。

在外壳中:

>>>from django.core.urlresolvers import reverse
>>>reverse('login')
'/accounts/login/'
于 2009-10-05T12:03:31.217 回答
14

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

于 2012-01-09T15:42:51.800 回答