Django框架实现逆向解析url的方法


Posted in Python onJuly 04, 2018

本文实例讲述了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:

from django.conf.urls import patterns, url
urlpatterns = patterns('',
  #...
  url(r'^articles/(\d{4})/$', 'news.views.year_archive'),
  #...
)

根据设计,这个url的目的是将是nnnn年的文章存档(archive),即/articles/nnnn/

1.在模板中,可以这样来使用:

<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代码中

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程序设计有所帮助。

Python 相关文章推荐
简单的抓取淘宝图片的Python爬虫
Dec 25 Python
Python中的异常处理简明介绍
Apr 13 Python
Python数据库的连接实现方法与注意事项
Feb 27 Python
python使用tensorflow保存、加载和使用模型的方法
Jan 31 Python
python使用rpc框架gRPC的方法
Aug 24 Python
详解Python with/as使用说明
Dec 13 Python
python反转列表的三种方式解析
Nov 08 Python
pytorch 自定义参数不更新方式
Jan 06 Python
解决pymysql cursor.fetchall() 获取不到数据的问题
May 15 Python
Python中Yield的基本用法
Oct 18 Python
python+flask编写一个简单的登录接口
Nov 13 Python
Python jiaba库的使用详解
Nov 23 Python
pandas 实现字典转换成DataFrame的方法
Jul 04 #Python
详解Django中六个常用的自定义装饰器
Jul 04 #Python
浅析Python pandas模块输出每行中间省略号问题
Jul 03 #Python
python中datetime模块中strftime/strptime函数的使用
Jul 03 #Python
pandas.DataFrame选取/排除特定行的方法
Jul 03 #Python
python 中字典嵌套列表的方法
Jul 03 #Python
Django项目开发中cookies和session的常用操作分析
Jul 03 #Python
You might like
乱谈我对耳机、音箱的感受
2021/03/02 无线电
第一节--面向对象编程
2006/11/16 PHP
PHP 5.3.0 安装分析心得
2009/08/07 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
Javascript 检测键盘按键信息及键码值对应介绍
2013/01/03 Javascript
javascript计算用户打开网页的停留时间
2014/01/09 Javascript
jquery自动将form表单封装成json的具体实现
2014/03/17 Javascript
jquery模拟LCD 时钟的html文件源代码
2014/06/16 Javascript
详谈jQuery中的this和$(this)
2014/11/13 Javascript
简单实现的JQuery文本框水印插件
2016/06/14 Javascript
JavaScript 计算笛卡尔积实例详解
2016/12/02 Javascript
实现一个简单的vue无限加载指令方法
2017/01/10 Javascript
jquery操作select取值赋值与设置选中实例
2017/02/28 Javascript
js获取ip和地区
2017/03/10 Javascript
jQuery实现html table行Tr的复制、删除、计算功能
2017/07/10 jQuery
基于JavaScript实现飘落星星特效
2017/08/10 Javascript
详解Vue + Vuex 如何使用 vm.$nextTick
2017/11/20 Javascript
Vue 获取数组键名的方法
2018/06/21 Javascript
如何用JavaScript实现功能齐全的单链表详解
2019/02/11 Javascript
150行Node.js实现的dns代理工具
2019/08/02 Javascript
JavaScript判断浏览器版本的方法
2019/11/03 Javascript
vue data有值,但是页面{{}} 取不到值的解决
2020/11/09 Javascript
[02:42]2014DOTA2国际邀请赛 三冰专访:我会打到Ti20
2014/07/13 DOTA
[01:13]2015国际邀请赛线下观战现场
2015/08/08 DOTA
python使用BeautifulSoup分页网页中超链接的方法
2015/04/04 Python
Python手机号码归属地查询代码
2016/05/04 Python
python处理csv中的空值方法
2018/06/22 Python
通过cmd进入python的步骤
2020/06/16 Python
如何用Matplotlib 画三维图的示例代码
2020/07/28 Python
《乌鸦和狐狸》教学反思
2014/02/08 职场文书
视光学专业自荐信
2014/06/24 职场文书
企业优秀团员事迹材料
2014/08/20 职场文书
出售房屋协议书范本
2014/10/06 职场文书
11.9消防日宣传标语
2014/10/08 职场文书
何时使用Map来代替普通的JS对象
2021/04/29 Javascript
利用Redis实现点赞功能的示例代码
2022/06/28 Redis