本文实例讲述了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:
1
2
3
4
5
6
|
from django.conf.urls import patterns, url urlpatterns = patterns('', #... url(r '^articles/(\d{4})/$' , 'news.views.year_archive' ), #... ) |
根据设计,这个url的目的是将是nnnn年的文章存档(archive),即/articles/nnnn/
1.在模板中,可以这样来使用:
1
2
3
4
5
6
7
|
<a href = "{% url 'news.views.year_archive' 2012 %}" rel = "external nofollow" > 2012 Archive< / a> { # Or with the year in a template context variable: #} <ul> { % for yearvar in year_list % } <li><a href = "{% url 'news.views.year_archive' yearvar %}" rel = "external nofollow" >{{ yearvar }} Archive< / a>< / li> { % endfor % } < / ul> |
解释一下:首先,根据视图 'news.views.year_artichive'可以定位到指定的URLconf中,然后后面的2012来填充articles/\d{4}
最终的结果为:
<a href="articles/2012/" rel="external nofollow" >2012 Archive</a>
这里就是根据试图和所提供的值来逆向查询url
下面的类似,
2.在python代码中
1
2
3
4
5
6
7
|
from django.core.urlresolvers import reverse from django.http import HttpResponseRedirect def redirect_to_year(request): # ... year = 2006 # ... return HttpResponseRedirect(reverse( 'news.views.year_archive' , args = (year,))) |
解释一下:首先,必须引入django.core.urlresolvers.reverse()
方法,然后原理就是,根据提供的试图和参数
的值来逆向查找URLconf,匹配相应的url然后把值拿回来,最后,reverse()
返回的值为:articles/2006/,这样就逆向的查出了需要的url
希望本文所述对大家基于Django框架的Python程序设计有所帮助。
原文链接:https://blog.csdn.net/win_turn/article/details/74355811