Django框架实现逆向解析url的方法
本文实例讲述了Django框架实现逆向解析url的方法。分享给大家供大家参考,具体如下:
Django中提供了一个关于URL的映射的解决方案,你可以做两个方向的使用:
①.有客户端的浏览器发起一个url请求,Django根据URL解析,把url中的参数捕获,调用相应的试图,获取相应的数据,然后返回给客户端显示
②.通过一个视图的名字,再加上一些参数和值,逆向获取相应的URL
第一个就是平常的请求有URLconf来解析的过程,
第二个叫做,url的逆向解析,url逆向匹配,url的逆向查阅,等
Django提供了不同的层级的url逆向处理工具:
①.在模板templates中,使用url标记,如:{%url%}
②.在Python代码中,使用django.core.urlresolvers.reverse()方法
③.在更高一层级的处理url中,用get_absolute_url()方法
示例
看如下的URLconf:
fromdjango.conf.urlsimportpatterns,url urlpatterns=patterns('', #... url(r'^articles/(\d{4})/$','news.views.year_archive'), #... )
根据设计,这个url的目的是将是nnnn年的文章存档(archive),即/articles/nnnn/
1.在模板中,可以这样来使用:
2012Archive {#Orwiththeyearinatemplatecontextvariable:#} {%foryearvarinyear_list%}
- {%endfor%}
{{yearvar}}Archive
解释一下:首先,根据视图'news.views.year_artichive'可以定位到指定的URLconf中,然后后面的2012来填充articles/\d{4}
最终的结果为:
2012Archive
这里就是根据试图和所提供的值来逆向查询url
下面的类似,
2.在python代码中
fromdjango.core.urlresolversimportreverse fromdjango.httpimportHttpResponseRedirect defredirect_to_year(request): #... year=2006 #... returnHttpResponseRedirect(reverse('news.views.year_archive',args=(year,)))
解释一下:首先,必须引入django.core.urlresolvers.reverse()方法,然后原理就是,根据提供的试图和参数
的值来逆向查找URLconf,匹配相应的url然后把值拿回来,最后,reverse()返回的值为:articles/2006/,这样就逆向的查出了需要的url
希望本文所述对大家基于Django框架的Python程序设计有所帮助。