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 字典(Dictionary)操作详解
Mar 11 Python
用python + openpyxl处理excel2007文档思路以及心得
Jul 14 Python
python进阶教程之模块(module)介绍
Aug 30 Python
Python抓取京东图书评论数据
Aug 31 Python
windows下python之mysqldb模块安装方法
Sep 07 Python
详解flask入门模板引擎
Jul 18 Python
Anaconda下配置python+opencv+contribx的实例讲解
Aug 06 Python
Python Series从0开始索引的方法
Nov 06 Python
Pytorch卷积层手动初始化权值的实例
Aug 17 Python
python实现的config文件读写功能示例
Sep 24 Python
Python操作qml对象过程详解
Sep 26 Python
python实现密度聚类(模板代码+sklearn代码)
Apr 27 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版(5)
2006/10/09 PHP
PHP 动态随机生成验证码类代码
2010/04/09 PHP
ubuntu12.04使用c编写php扩展模块教程分享
2013/12/25 PHP
简单谈谈php中ob_flush和flush的区别
2014/11/27 PHP
jquery+thinkphp实现跨域抓取数据的方法
2016/10/15 PHP
yii使用bootstrap分页样式的实例
2017/01/17 PHP
PHP自动补全表单的两种方法
2017/03/06 PHP
驱动事件的addEvent.js代码
2007/03/27 Javascript
JavaScript 继承的实现
2009/07/09 Javascript
面向对象的Javascript之一(初识Javascript)
2012/01/20 Javascript
Javascript使用function创建类的两种方法(推荐)
2016/11/19 Javascript
JS实现的添加弹出层并完成锁屏操作示例
2017/04/07 Javascript
3分钟掌握常用的JS操作JSON方法总结
2017/04/25 Javascript
electron demo项目npm install安装失败的解决方法
2018/02/06 Javascript
vue select组件的使用与禁用实现代码
2018/04/10 Javascript
JavaScript常见事件对象与操作实例总结
2019/01/05 Javascript
ionic3双击返回退出应用的方法
2019/09/17 Javascript
解决ant Design中this.props.form.validateFields未执行的问题
2020/10/27 Javascript
[01:01:24]DOTA2上海特级锦标赛A组败者赛 EHOME VS CDEC第三局
2016/02/25 DOTA
[01:50]《我与DAC》之玩家:iG夺冠时的那面红旗
2018/03/29 DOTA
Python开发的单词频率统计工具wordsworth使用方法
2014/06/25 Python
日常整理python执行系统命令的常见方法(全)
2015/10/22 Python
python实现淘宝秒杀聚划算抢购自动提醒源码
2020/06/23 Python
python使用mysql的两种使用方式
2018/03/07 Python
Python实现深度遍历和广度遍历的方法
2019/01/22 Python
python导入坐标点的具体操作
2019/05/10 Python
Python hashlib模块加密过程解析
2019/11/05 Python
在pycharm中debug 实时查看数据操作(交互式)
2020/06/09 Python
Scrapy项目实战之爬取某社区用户详情
2020/09/17 Python
用HTML5制作一个简单的弹力球游戏
2015/05/12 HTML / CSS
搞笑婚礼主持词
2014/03/13 职场文书
俞敏洪励志演讲稿
2014/04/29 职场文书
体育教育毕业生自荐信
2014/06/29 职场文书
幼师辞职信怎么写
2015/02/27 职场文书
2015中秋节晚会开场白
2015/07/30 职场文书
Canvas如何做个雪花屏版404的实现
2021/09/25 HTML / CSS