django设置文件中的一些选项是网址,例如LOGIN_URL
和LOGIN_REDIRECT_URL
。是否可以避免硬编码这些网址,而是使用反向网址映射?目前这是我发现自己在多个地方写相同网址的唯一地方。
答案 0 :(得分:53)
从Django 1.5开始,LOGIN_URL
和LOGIN_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,您可以使用reverse_lazy
LOGIN_URL = reverse_lazy('login')
这是原始答案,在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