关闭

Django reverse

标签: Django python 学习笔记python
1087人阅读 评论(0) 收藏 举报
分类:

django的一条哲学是(don't repeat yourself DRY ).熟悉django的人都知道,在0.96版中新加入了django.core.urlresolvers.reverse这个东东,下面让我们来看一下这究竟是怎样反映DRY思想的:
首先让我们一句话概括reverse()是干什么的?反解析url以直接访问其它视图方法。众所周知,在django的mvc(mvt也可以)中,url和view是通过url.py和views.py实现分离的,具体view的访问是通过url.py中设置的对应方法来实现的。这固然是正确的。但是考虑如下情况,我们有一个view最后实现页面跳转:

Python代码  收藏代码
  1. views.py  
  2. def redirect(request):  
  3.     return HttpResponseRedirect("/vote/1/")  
  4.   
  5. url.py  
  6. (r'^/vote/(?P<poll_id>\d+)/$','mysite.poll.vote')  
 

这样做起来就有1个问题:如果未来某天我们的url发生了改变,我们将不得不同时修改这两个文件。这和DRY哲学思想是冲突的,那么有什么办法能让我们只用修改url.py呢,答案就是使用reverse().
reverse的用例如下:

Python代码  收藏代码
  1. views.py  
  2.   
  3. from django.core.urlresolvers import reverse  
  4.   
  5. def redirect(request):  
  6.     return HttpResponseRedirect(reverse('mysite.polls.views.detail',args=(1,)))  
 

很容易明白,第一个参数就直接添入要使用的view方法,第二个args里边顺序填入方法的参数,(extra_context也从这里传入)然后剩下的就全部交给django去完成拉。于是我们就可以放心的修改url.py里的url配置,不必再担心有什么地方没修改网站出错啦.
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:373800次
    • 积分:9119
    • 等级:
    • 排名:第2103名
    • 原创:527篇
    • 转载:34篇
    • 译文:13篇
    • 评论:41条
    我的站点

    这里只是我的备份地方

    DCOS
    博客专栏
    文章分类