一些在Django配置文件中的选项是URL,例如LOGIN_URL
和LOGIN_REDIRECT_URL
。 是否有可能避免硬编码这些URL,而是使用反向URL映射? 目前,这是真的,我发现自己在多个地方写相同的URL的唯一地方。
Answer 1:
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,您还可以使用视图功能名称,但不建议这样做,因为它是在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