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中实现三目运算的方法
Jun 21 Python
python 去除txt文本中的空格、数字、特定字母等方法
Jul 24 Python
Python实现获取汉字偏旁部首的方法示例【测试可用】
Dec 18 Python
Python3.5模块的定义、导入、优化操作图文详解
Apr 27 Python
Pandas之groupby( )用法笔记小结
Jul 23 Python
Python3 A*寻路算法实现方式
Dec 24 Python
PyInstaller的安装和使用的详细步骤
Jun 02 Python
在python下实现word2vec词向量训练与加载实例
Jun 09 Python
详细分析Python可变对象和不可变对象
Jul 09 Python
详解Python中的路径问题
Sep 02 Python
python 将Excel转Word的示例
Mar 02 Python
Python3使用Qt5来实现简易的五子棋小游戏
May 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获取url参数方法总结
2014/11/13 PHP
php模拟post提交数据的方法
2015/02/12 PHP
PHP读取文件的常见几种方法
2016/11/03 PHP
laravel 解决多库下的DB::transaction()事务失效问题
2019/10/21 PHP
可以支持多中格式的JS键盘
2007/05/02 Javascript
基于JQuery 选择器使用说明介绍
2013/04/18 Javascript
setInterval与clearInterval的使用示例代码
2014/01/28 Javascript
JavaScript中的anchor()方法使用详解
2015/06/08 Javascript
JS实现仿苹果底部任务栏菜单效果代码
2015/08/28 Javascript
关于JavaScript作用域你想知道的一切
2016/02/04 Javascript
BootStrap使用file-input插件上传图片的方法
2016/09/05 Javascript
原生js封装的一些jquery方法(详解)
2016/09/20 Javascript
前端js实现文件的断点续传 后端PHP文件接收
2016/10/14 Javascript
JS取数字小数点后两位或n位的简单方法
2016/10/24 Javascript
在vue中给列表中的奇数行添加class的实现方法
2018/09/05 Javascript
使用vue根据状态添加列表数据和删除列表数据的实例
2018/09/29 Javascript
vue-resourc发起异步请求的方法
2020/02/11 Javascript
使用Python制作微信跳一跳辅助
2018/01/31 Python
对python同一个文件夹里面不同.py文件的交叉引用方法详解
2018/12/15 Python
python运行时强制刷新缓冲区的方法
2019/01/14 Python
python 用for循环实现1~n求和的实例
2019/02/01 Python
浅析Python 中几种字符串格式化方法及其比较
2019/07/02 Python
解决Django加载静态资源失败的问题
2019/07/28 Python
python通过robert、sobel、Laplace算子实现图像边缘提取详解
2019/08/21 Python
Xadmin+rules实现多选行权限方式(级联效果)
2020/04/07 Python
windows支持哪个版本的python
2020/07/03 Python
不可轻视HTML5!App三年内将被html5顶替彻底消失
2015/11/18 HTML / CSS
英国儿童家具专卖店:GLTC
2016/09/24 全球购物
测试驱动开发的主要步骤是什么
2014/12/10 面试题
毕业论文答辩开场白和答辩技巧
2015/05/27 职场文书
运动会通讯稿200字
2015/07/20 职场文书
新闻通讯稿范文
2015/07/22 职场文书
二手手机买卖合同范本(2019年版)
2019/10/28 职场文书
Nginx访问日志及错误日志参数说明
2021/03/31 Servers
MySQL系列之八 MySQL服务器变量
2021/07/02 MySQL
Java 超详细讲解十大排序算法面试无忧
2022/04/08 Java/Android