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 相关文章推荐
忘记ftp密码使用python ftplib库暴力破解密码的方法示例
Jan 22 Python
深入解析Python中的descriptor描述器的作用及用法
Jun 27 Python
Python中的with语句与上下文管理器学习总结
Jun 28 Python
用tensorflow构建线性回归模型的示例代码
Mar 05 Python
django admin 后台实现三级联动的示例代码
Jun 22 Python
numpy concatenate数组拼接方法示例介绍
May 27 Python
numpy.random模块用法总结
May 27 Python
Tornado实现多进程/多线程的HTTP服务详解
Jul 25 Python
python numpy生成等差数列、等比数列的实例
Feb 25 Python
Xadmin+rules实现多选行权限方式(级联效果)
Apr 07 Python
python基于openpyxl生成excel文件
Dec 23 Python
基于注解实现 SpringBoot 接口防刷的方法
Mar 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
真正面向对象编程:PHP5.01发布
2006/10/09 PHP
玩转虚拟域名◎+ .
2006/10/09 PHP
《PHP边学边教》(04.编写简易的通讯录――视频教程1)
2006/12/13 PHP
深入理解PHP之数组(遍历顺序)  Laruence原创
2012/06/13 PHP
phpnow php探针环境检测代码
2014/11/04 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
2020/02/18 PHP
jquery 插件 web2.0分格的分页脚本,可用于ajax无刷新分页
2008/12/25 Javascript
jquery动画2.元素坐标动画效果(创建一个图片走廊)
2012/08/24 Javascript
鼠标焦点离开文本框时验证的js代码
2013/07/19 Javascript
浅析JavaScript中的CSS属性及命名规范
2013/11/28 Javascript
jQuery中.live()方法的用法深入解析
2013/12/30 Javascript
jQuery的$.proxy()应用示例介绍
2014/04/03 Javascript
JavaScript代码应该放在HTML代码哪个位置比较好?
2014/10/16 Javascript
jQuery中:lt选择器用法实例
2014/12/29 Javascript
详解JavaScript中void语句的使用
2015/06/04 Javascript
jQuery实现右键菜单、遮罩等效果代码
2016/09/27 Javascript
浅析js的模块化编写 require.js
2016/12/07 Javascript
JavaScript原生编写《飞机大战坦克》游戏完整实例
2017/01/04 Javascript
详解Vue.js分发之作用域槽
2017/06/13 Javascript
ES6新增数据结构WeakSet的用法详解
2017/08/07 Javascript
微信小程序实现图片放大预览功能
2020/10/22 Javascript
layui 实现二级弹窗弹出之后 关闭一级弹窗的方法
2019/09/18 Javascript
Python实现快速排序和插入排序算法及自定义排序的示例
2016/02/16 Python
Python从ZabbixAPI获取信息及实现Zabbix-API 监控的方法
2018/09/17 Python
python使用adbapi实现MySQL数据库的异步存储
2019/03/19 Python
3行Python代码实现图像照片抠图和换底色的方法
2019/10/10 Python
如何使用Python抓取网页tag操作
2020/02/14 Python
Pycharm打开已有项目配置python环境的方法
2020/07/03 Python
美国高端寝具品牌:Coyuchi
2017/02/08 全球购物
The North Face北面英国官网:美国著名户外品牌
2017/12/13 全球购物
美国Randolph太阳镜官网:美国制造的飞行员太阳镜和射击眼镜
2018/06/15 全球购物
介绍一下Make? 为什么使用make
2013/12/08 面试题
个人思想理论学习的自我鉴定
2013/11/30 职场文书
服装厂厂长职责
2013/12/16 职场文书
SQL Server远程连接的设置步骤(图文)
2022/03/23 SQL Server
mysql sock文件存储了什么信息
2022/07/15 MySQL