Django框架反向解析操作详解


Posted in Python onNovember 28, 2019

本文实例讲述了Django框架反向解析操作。分享给大家供大家参考,具体如下:

1. 定义:

随着功能的增加会出现更多的视图,可能之前配置的正则表达式不够准确,于是就要修改正则表达式,但是正则表达式一旦修改了,之前所有对应的超链接都要修改,真是一件麻烦的事情,而且可能还会漏掉一些超链接忘记修改,有办法让链接根据正则表达式动态生成吗? 就是用反向解析的办法。

2. 应用范围:

  • 模板中的超链接
  • 视图中的重定向

3. 使用方法:

  • 定义url时,需要为include定义namespace属性,为url定义name属性
  • 使用时,在模板中使用url标签,在视图中使用reverse函数,根据正则表达式动态生成地址,减轻后期维护成本。

4. 模板中超链接步骤:

1)在项目urls.py中为include定义namespace属性。

url(r'^',include('booktest.urls',namespace='booktest')),

2)在应用的urls.py中为url定义name属性,并修改为fan2。

url(r'^fan2/$', views.fan2,name='fan2'),

3)在模板中使用url标签做超链接,此处为templates/booktest/fan1.html文件。

<html>
<head>
  <title>反向解析</title>
</head>
<body>
普通链接:<a href="/fan2/" rel="external nofollow" >普通fan2</a>
<hr>
反向解析:<a href="{%url 'booktest:fan2'%}" rel="external nofollow" >反向解析fan2</a>
</body>
</html>

4)回到浏览器中,后退,刷新,查看源文件,两个链接地址一样。

 Django框架反向解析操作详解

5)在应用的urls.py中,将fan2修改为fan_show。

url(r'^fan_show/$', views.fan2,name='fan2'),

6)回到浏览器中,刷新,查看源文件,两个链接地址不一样。

Django框架反向解析操作详解

4. 视图中的重定向:

from django.shortcuts import redirect
from django.core.urlresolvers import reverse
return redirect(reverse('booktest:fan2'))

5. 反向解析中URL的参数

位置参数

1)在booktest/urls.py中,修改fan2如下:

url(r'^fan(\d+)_(\d+)/$', views.fan2,name='fan2'),

2)修改templates/booktest/fan1.html文件如下:

<html>
<head>
  <title>反向解析</title>
</head>
<body>
普通链接:<a href="/fan2_3/" rel="external nofollow" >fan2</a>
<hr>
反向解析:<a href="{%url 'booktest:fan2' 2 3%}" rel="external nofollow" >fan2</a>
</body>
</html>

3)回到浏览器中,刷新,查看源文件如下图:

Django框架反向解析操作详解

使用重定向传递位置参数格式如下:

return redirect(reverse('booktest:fan', args=(2,3)))

关键字参数

1)在booktest/urls.py中,修改fan2如下:

url(r'^fan(?P<id>\d+)_(?P<age>\d+)/$', views.fan2,name='fan2'),

2)修改templates/booktest/fan1.html文件如下:

<html>
<head>
  <title>反向解析</title>
</head>
<body>
普通链接:<a href="/fan100_18/" rel="external nofollow" >fan2</a>
<hr>
反向解析:<a href="{%url 'booktest:fan2' id=100 age=18%}" rel="external nofollow" >fan2</a>
</body>
</html>

3)回到浏览器中,刷新,查看源文件如下图:

Django框架反向解析操作详解

使用重定向传递关键字参数格式如下:

return redirect(reverse('booktest:fan2', kwargs={'id':110,'age':26}))

希望本文所述对大家基于Django框架的Python程序设计有所帮助。

Python 相关文章推荐
解决谷歌搜索技术文章时打不开网页问题的python脚本
Feb 10 Python
Python中下划线的使用方法
Mar 27 Python
利用python程序帮大家清理windows垃圾
Jan 15 Python
python判断字符串是否是json格式方法分享
Nov 07 Python
python将每个单词按空格分开并保存到文件中
Mar 19 Python
详解pandas数据合并与重塑(pd.concat篇)
Jul 09 Python
python线程定时器Timer实现原理解析
Nov 30 Python
浅谈图像处理中掩膜(mask)的意义
Feb 19 Python
浅谈python 中的 type(), dtype(), astype()的区别
Apr 09 Python
python TCP包注入方式
May 05 Python
Python ellipsis 的用法详解
Nov 20 Python
tensorboard 可视化之localhost:6006不显示的解决方案
May 22 Python
Django框架中间件定义与使用方法案例分析
Nov 28 #Python
Python Numpy 自然数填充数组的实现
Nov 28 #Python
Python创建数字列表的示例
Nov 28 #Python
flask框架json数据的拿取和返回操作示例
Nov 28 #Python
Python 生成一个从0到n个数字的列表4种方法小结
Nov 28 #Python
django 框架实现的用户注册、登录、退出功能示例
Nov 28 #Python
python 变量初始化空列表的例子
Nov 28 #Python
You might like
基于mysql的bbs设计(二)
2006/10/09 PHP
PHP 5.3 下载时 VC9、VC6、Thread Safe、Non Thread Safe的区别分析
2011/03/28 PHP
采用header定义为文件然后readfile下载(隐藏下载地址)
2014/01/31 PHP
linux中cd命令使用详解
2015/01/08 PHP
php+html5使用FormData对象提交表单及上传图片的方法
2015/02/11 PHP
分享ThinkPHP3.2中关联查询解决思路
2015/09/20 PHP
PHP实现多级分类生成树的方法示例
2017/02/07 PHP
php + WebUploader实现图片批量上传功能
2019/05/06 PHP
PHP abstract与interface之间的区别
2013/11/11 Javascript
基于JavaScript实现全屏透明遮罩div层锁屏效果
2016/01/26 Javascript
JQuery.validate在ie8下不支持的快速解决方法
2016/05/18 Javascript
全面了解javascript三元运算符
2016/06/27 Javascript
JS验证图片格式和大小并预览的简单实例
2016/10/11 Javascript
Bootstrap select下拉联动(jQuery cxselect)
2017/01/04 Javascript
利用 spin.js 生成等待效果(js 等待效果)
2017/06/25 Javascript
元素全屏的设置与监听实例
2017/11/28 Javascript
JS实现带动画的回到顶部效果
2017/12/28 Javascript
Node.js Buffer用法解读
2018/05/18 Javascript
Koa 中的错误处理解析
2019/04/09 Javascript
解决windows下Sublime Text 2 运行 PyQt 不显示的方法分享
2014/06/18 Python
使用Python的urllib2模块处理url和图片的技巧两则
2016/02/18 Python
python 按照固定长度分割字符串的方法小结
2018/04/30 Python
10 行Python 代码实现 AI 目标检测技术【推荐】
2019/06/14 Python
Pytorch中的variable, tensor与numpy相互转化的方法
2019/10/10 Python
使用tensorflow显示pb模型的所有网络结点方式
2020/01/23 Python
Matplotlib使用Cursor实现UI定位的示例代码
2020/03/12 Python
Python 使用生成器代替线程的方法
2020/08/04 Python
用canvas做一个DVD待机动画的实现代码
2019/04/12 HTML / CSS
求职信结尾怎么写
2014/05/26 职场文书
医疗专业毕业生求职信
2014/08/28 职场文书
电力培训学习心得体会
2016/01/11 职场文书
2019数学教师下学期工作总结
2019/06/27 职场文书
图文详解nginx日志切割的实现
2022/01/18 Servers
大脑的记忆过程在做数据压缩,不同图形也有共同的记忆格式
2022/04/29 数码科技
vue实现简易音乐播放器
2022/08/14 Vue.js
Win10本地连接不见了怎么恢复? win10系统电脑本地连接不见了解决方法
2023/01/09 数码科技