Tuesday, April 28, 2009

Django|reverse函数

python BlogSpot: django reverse函数

Wednesday

django reverse函数

在0.96版中新加入了django.core.urlresolvers.reverse
reverse()是干什么的?反解析url以直接访问其它视图方法

在django的mvc(mvt也可以)中,url和view是通过url.py和views.py实现分离的,具体view的访问是通过url.py中设置的对应方法来实现的。

有一个view最后实现页面跳转:

views.py
def redirect(request):
return HttpResponseRedirect("/vote/1/")

url.py
(r'^/vote/(?P\d+)/$','mysite.poll.vote')

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

views.py

from django.core.urlresolvers import reverse

def redirect(request):
return HttpResponseRedirect(reverse('mysite.polls.views.detail',args=(1,)))

很容易明白,第一个参数就直接添入要使用的view方法,第二个args里边顺序填入方法的参数,(extra_context也从这里传入)然后剩下的就全部交给django去完成拉。
...

No comments: