Django设置文件中的一些选项是url,例如LOGIN_URL
和LOGIN_REDIRECT_URL
。是否有可能避免硬编码这些URL,而是使用反向URL映射?目前这确实是我发现自己在多个地方写同一个网站的唯一地方。Django - 在设置中使用反向URL映射
回答
的Django 1.5及更高版本
由于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
Django的1.4,你可以可以使用reverse_lazy
LOGIN_URL = reverse_lazy('login')
的Django 1.3和更早
这是原来的答案,这reverse_lazy
工作之前加入Django
In url s.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/'
啊,很好的解决方案,我不考虑从设置 - >网址,只能反过来。 +1 – 2009-10-05 12:12:30
您是否可以避免对django根进行硬编码,以便在example.com/root而不是example.com/上部署django应用程序时,/ accounts/login可以解析为/ root/accounts/login? – gozzilli 2013-11-06 06:23:43
@gozzilli - 自从Django 1.4开始,我将使用'reverse_lazy'而不是将'settings.LOGIN_URL'导入到网址中。我已经更新了答案。 – Alasdair 2013-11-06 08:04:44
在Django开发版本reverse_lazy()成为一个选项: https://docs.djangoproject.com/en/dev/ref/urlresolvers/#reverse-lazy
+1感谢您的支持! – 2012-01-09 18:17:01
计划于2012年3月发布te 1.4版 – 2012-01-18 12:44:25
以下是早期版本的摘录:http://djangosnippets.org/snippets/499/ – 2012-02-01 00:54:48
- 1. 反向URL映射与AppEngine
- 2. django URL映射?
- 3. Django 1.7 URL映射
- 4. Python中的URL映射/ Django
- 5. 双向/反向映射
- 6. 无BiMap映射和反向映射
- 7. 在JQuery中映射Django URL append()
- 8. Django URL映射问题/ DetailView
- 9. 映射ReferencesAny的反向吗?
- 10. Django设置和视图映射错误
- 11. 在反应中使用道具映射
- 12. 具有非唯一值的多映射的反向/反向映射
- 13. 多租户django应用程序使用URL映射而不是域映射
- 14. 如何在映射模型中设置反比关系的值?
- 15. Url映射,Url重定向/重写
- 16. 设置IRQ映射
- 17. 使用反射时设置CultureInfo调用
- 18. Django跨站点反向URL
- 19. Django Haystack反向URL失败
- 20. GLSL中的反射映射
- 21. 是否可以映射mod_rewrite URL的反向?
- 22. 使用反射设置属性值
- 23. 使用反射设置指针值?
- 24. 使用反射设置字段
- 25. 使用反射设置Int32的值
- 26. 设置静态事件使用反射
- 27. 在servlet中的URL映射
- 28. django url templatetag无法反向url
- 29. 在NHibernate映射中设置列整理
- 30. 如何在映射器中设置值?
我对此表示怀疑,因为'settings.py'是URL模块之前加载。有兴趣了解一下。很好的问题。 – 2009-10-05 05:43:38