Django的 - 使用设置反向URL映射(Django - use reverse url map

2019-08-17 06:47发布

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

Answer 1:

Django的1.5和更高版本

由于Django的1.5, LOGIN_URLLOGIN_REDIRECT_URL接受名为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

然后添加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/'


Answer 2:

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



文章来源: Django - use reverse url mapping in settings