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 相关文章推荐
仅用50行Python代码实现一个简单的代理服务器
Apr 08 Python
django基础之数据库操作方法(详解)
May 24 Python
python+opencv打开摄像头,保存视频、拍照功能的实现方法
Jan 08 Python
Python列表常见操作详解(获取,增加,删除,修改,排序等)
Feb 18 Python
django2.2安装错误最全的解决方案(小结)
Sep 24 Python
Python全面分析系统的时域特性和频率域特性
Feb 26 Python
Python3标准库之functools管理函数的工具详解
Feb 27 Python
Python集成开发工具Pycharm的安装和使用详解
Mar 18 Python
Tensorflow安装问题: Could not find a version that satisfies the requirement tensorflow
Apr 20 Python
python如何删除文件、目录
Jun 23 Python
Python代码需要缩进吗
Jul 01 Python
Python Spyder 调出缩进对齐线的操作
Feb 26 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文件上传实例详解!!!
2007/01/02 PHP
php Smarty模板生成html文档的方法
2010/04/12 PHP
Yii框架结合sphinx,Ajax实现搜索分页功能示例
2016/10/18 PHP
php图形jpgraph操作实例分析
2017/02/22 PHP
ThinkPHP5.0多个文件上传后找不到临时文件的修改方法
2018/07/30 PHP
php探针不显示内存解决方法
2019/09/17 PHP
laravel5 Eloquent 实现事务方式
2019/10/21 PHP
用函数式编程技术编写优美的 JavaScript_ibm
2008/05/16 Javascript
js一组验证函数
2008/12/20 Javascript
JavaScript 基础知识 被自己遗忘的
2009/10/15 Javascript
jQuery select操作控制方法小结
2010/05/26 Javascript
jquery load()在firefox(火狐)下显示不正常的解决方法
2011/04/05 Javascript
jQuery $.extend()用法总结
2014/06/15 Javascript
跟我学习javascript的基本类型和引用类型
2015/11/16 Javascript
基于touch.js手势库+zepto.js插件开发图片查看器(滑动、缩放、双击缩放)
2016/11/17 Javascript
详谈jQuery unbind 删除绑定事件 / 移除标签方法
2017/03/02 Javascript
JavaScript中各数制转换全面总结
2017/08/21 Javascript
javascript 中事件冒泡和事件捕获机制的详解
2017/09/01 Javascript
Vue实现动态创建和删除数据的方法
2018/03/17 Javascript
JS实现灯泡开关特效
2020/03/30 Javascript
[45:32]Liquid vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
[02:22]完美世界DOTA2联赛PWL S3 集锦第一期
2020/12/15 DOTA
深入讲解Python中的迭代器和生成器
2015/10/26 Python
python实现堆和索引堆的代码示例
2018/03/19 Python
Python中Subprocess的不同函数解析
2019/12/10 Python
Python reshape的用法及多个二维数组合并为三维数组的实例
2020/02/07 Python
如何在keras中添加自己的优化器(如adam等)
2020/06/19 Python
美国知名户外用品畅销中心:Sierra Trading Post
2016/07/19 全球购物
新西兰最大的天然保健及护肤品网站:HealthPost(直邮中国)
2021/02/13 全球购物
计算机专业职业生涯规划范文
2014/01/19 职场文书
完美主义个人的自我评价
2014/02/17 职场文书
担保书格式及范文
2014/04/01 职场文书
北京离婚协议书范文2014
2014/09/29 职场文书
个人整改措施落实情况汇报
2014/10/29 职场文书
少先队中队工作总结
2015/08/14 职场文书
领导干部学习三严三实心得体会
2016/01/05 职场文书