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 相关文章推荐
CentOS安装pillow报错的解决方法
Jan 27 Python
Python变量和数据类型详解
Feb 15 Python
多个应用共存的Django配置方法
May 30 Python
Python中if elif else及缩进的使用简述
May 31 Python
python for循环输入一个矩阵的实例
Nov 14 Python
python获取微信小程序手机号并绑定遇到的坑
Nov 19 Python
django 信号调度机制详解
Jul 19 Python
PIL包中Image模块的convert()函数的具体使用
Feb 26 Python
opencv 阈值分割的具体使用
Jul 08 Python
python开发一个解析protobuf文件的简单编译器
Nov 17 Python
python uuid生成唯一id或str的最简单案例
Jan 13 Python
Python Pandas数据分析之iloc和loc的用法详解
Nov 11 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
「OVERLORD」动画重要删减!雅儿贝德的背叛?至尊猎杀队结成
2020/04/09 日漫
30 个很棒的PHP开源CMS内容管理系统小结
2011/10/14 PHP
php将access数据库转换到mysql数据库的方法
2014/12/24 PHP
php中socket通信机制实例详解
2015/01/03 PHP
php版微信公众平台入门教程之开发者认证的方法
2016/09/26 PHP
php如何计算两坐标点之间的距离
2018/12/29 PHP
js URL参数的拼接方法比较
2012/02/15 Javascript
javascript:void(0)的作用示例介绍
2013/10/28 Javascript
Javascript中string转date示例代码
2013/11/01 Javascript
js控制href内容的连接内容的变化示例
2014/04/30 Javascript
node.js中watch机制详解
2014/11/17 Javascript
Javascript中获取对象的原型对象的方法小结
2015/02/25 Javascript
学习JavaScript设计模式之享元模式
2016/01/18 Javascript
javascript如何定义对象数组
2016/06/07 Javascript
利用BootStrap的Carousel.js实现轮播图动画效果
2016/12/21 Javascript
详解angularjs利用ui-route异步加载组件
2017/05/21 Javascript
详解使用Node.js 将txt文件转为Excel文件
2017/07/05 Javascript
vue router仿天猫底部导航栏功能
2017/10/18 Javascript
jQuery 点击获取验证码按钮及倒计时功能
2018/09/20 jQuery
JavaScript学习笔记之基于定时器实现图片无缝滚动功能详解
2019/01/09 Javascript
js/jquery遍历对象和数组的方法分析【forEach,map与each方法】
2019/02/27 jQuery
jQuery实现简易聊天框
2020/02/08 jQuery
js的Object.assign用法示例分析
2020/03/05 Javascript
JavaScript编码小技巧分享
2020/09/17 Javascript
Python中使用wxPython开发的一个简易笔记本程序实例
2015/02/08 Python
Python实现随机生成手机号及正则验证手机号的方法
2018/04/25 Python
pycharm下查看python的变量类型和变量内容的方法
2018/06/26 Python
Python+OpenCV图片局部区域像素值处理详解
2019/01/23 Python
python如何代码集体右移
2020/07/20 Python
Python调用系统命令os.system()和os.popen()的实现
2020/12/31 Python
ECCO爱步加拿大官网:北欧丹麦鞋履及皮具品牌
2017/07/08 全球购物
泰国网上购物:Shopee泰国
2018/09/14 全球购物
Vans(范斯)新西兰官方网站:美国原创极限运动品牌
2020/09/19 全球购物
公司总经理岗位职责
2015/04/01 职场文书
预备党员考察意见范文
2015/06/01 职场文书
光荣之路观后感
2015/06/12 职场文书