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字符和字符值(ASCII或Unicode码值)转换方法
May 21 Python
Python的Django框架中forms表单类的使用方法详解
Jun 21 Python
微信 用脚本查看是否被微信好友删除
Oct 28 Python
Python字典数据对象拆分的简单实现方法
Dec 05 Python
django Serializer序列化使用方法详解
Oct 16 Python
Python中创建二维数组
Oct 17 Python
在python3中pyqt5和mayavi不兼容问题的解决方法
Jan 08 Python
Python基于datetime或time模块分别获取当前时间戳的方法实例
Feb 19 Python
Python PyCharm如何进行断点调试
Jul 05 Python
Python PyInstaller库基本使用方法分析
Dec 12 Python
Python魔法方法 容器部方法详解
Jan 02 Python
python 爬取吉首大学网站成绩单
Jun 02 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
PHP中常用数组处理方法实例分析
2008/08/30 PHP
PHP Curl出现403错误的解决办法
2014/05/29 PHP
ThinkPHP之getField详解
2014/06/20 PHP
为PHP安装imagick时出现Cannot locate header file MagickWand.h错误的解决方法
2014/11/03 PHP
全面解读PHP的人气开发框架Laravel
2015/10/15 PHP
PHP 二维数组和三维数组的过滤
2016/03/16 PHP
JQUERY THICKBOX弹出层插件
2008/08/30 Javascript
javascript 动态添加事件代码
2008/11/30 Javascript
浅析webapp框架AngularUI的demo
2014/12/21 Javascript
招聘网站基于jQuery实现自动刷新简历
2015/05/10 Javascript
jquery弹出遮掩层效果【附实例代码】
2016/04/28 Javascript
HTML5 实现的一个俄罗斯方块实例代码
2016/09/19 Javascript
JavaScript防止全局变量污染的方法总结
2018/08/02 Javascript
优雅地使用loading(推荐)
2019/04/20 Javascript
解决Nuxt使用axios跨域问题
2020/07/06 Javascript
写了个监控nginx进程的Python脚本
2012/05/10 Python
Python多线程实例教程
2014/09/06 Python
python脚本设置系统时间的两种方法
2016/02/21 Python
Python numpy 点数组去重的实例
2018/04/18 Python
解决Python对齐文本字符串问题
2019/08/28 Python
jenkins配置python脚本定时任务过程图解
2019/10/29 Python
python 基于卡方值分箱算法的实现示例
2020/07/17 Python
HTML5 图片悬停放大的实现代码示例
2019/12/04 HTML / CSS
植村秀加拿大官网:Shu Uemura加拿大
2019/09/03 全球购物
BannerBuzz加拿大:在线定制横幅印刷、广告和标志
2020/03/10 全球购物
如何减少垃圾回收让内存更加有效使用
2013/10/18 面试题
公司培训欢迎词
2014/01/10 职场文书
运动会广播稿150字(9篇)
2014/09/20 职场文书
学校总务处领导干部个人对照检查材料思想汇报
2014/10/06 职场文书
优秀党员推荐材料
2014/12/18 职场文书
教师节晚会主持词
2015/06/30 职场文书
工作感想范文
2015/08/07 职场文书
基于Redis延迟队列的实现代码
2021/05/13 Redis
MySQL快速插入一亿测试数据
2021/06/23 MySQL
Python Flask搭建yolov3目标检测系统详解流程
2021/11/07 Python
请求模块urllib之PYTHON爬虫的基本使用
2022/04/08 Python