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 02 Python
Python 批量合并多个txt文件的实例讲解
May 08 Python
Python3.6实现连接mysql或mariadb的方法分析
May 18 Python
python统计中文字符数量的两种方法
Jan 31 Python
Appium+python自动化之连接模拟器并启动淘宝APP(超详解)
Jun 17 Python
linux下安装python3和对应的pip环境教程详解
Jul 01 Python
python求最大公约数和最小公倍数的简单方法
Feb 13 Python
python 实现线程之间的通信示例
Feb 14 Python
推荐8款常用的Python GUI图形界面开发框架
Feb 23 Python
如何使用PyCharm将代码上传到GitHub上(图文详解)
Apr 27 Python
python3中TQDM库安装及使用详解
Nov 18 Python
Python爬虫回测股票的实例讲解
Jan 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
理解和运用PHP中的多态性[译]
2011/08/02 PHP
ThinkPHP中的关联模型注意点
2014/06/16 PHP
WordPress迁移时一些常见问题的解决方法整理
2015/11/24 PHP
PHP7修改的函数
2021/03/09 PHP
popdiv
2006/07/14 Javascript
客户端脚本中常常出现的一些问题和调试技巧
2007/01/09 Javascript
Struts2的s:radio标签使用及用jquery添加change事件
2013/04/08 Javascript
js中settimeout方法加参数
2014/02/28 Javascript
JS计算网页停留时间代码
2014/04/28 Javascript
javascript中replace( )方法的使用
2015/04/24 Javascript
javascript模拟php函数in_array
2015/04/27 Javascript
JavaScript定时器和优化的取消定时器方法
2015/07/03 Javascript
js轮播图无缝滚动效果
2017/06/17 Javascript
Vue2.0用 watch 观察 prop 变化(不触发)
2017/09/08 Javascript
vue中使用element-ui进行表单验证的实例代码
2018/06/22 Javascript
vue实现评论列表功能
2019/10/25 Javascript
vue与django集成打包的实现方法
2019/11/11 Javascript
[01:02:34]TFT vs VGJ.T Supermajor 败者组 BO3 第二场 6.5
2018/06/06 DOTA
python getopt 参数处理小示例
2009/06/09 Python
深入理解Python分布式爬虫原理
2017/11/23 Python
python实现聊天小程序
2018/03/13 Python
python抓取需要扫微信登陆页面
2019/04/29 Python
pyqt5移动鼠标显示坐标的方法
2019/06/21 Python
python经典趣味24点游戏程序设计
2019/07/26 Python
django之状态保持-使用redis存储session的例子
2019/07/28 Python
Python使用正则实现计算字符串算式
2019/12/29 Python
Python的pygame安装教程详解
2020/02/10 Python
scrapy与selenium结合爬取数据(爬取动态网站)的示例代码
2020/09/28 Python
python爬虫scrapy框架的梨视频案例解析
2021/02/20 Python
低碳环保倡议书
2014/04/14 职场文书
借款协议书范本
2014/04/22 职场文书
2015年财政局工作总结
2015/05/21 职场文书
把77A收信机改造成收音机
2022/04/05 无线电
vue数据字典取键值项目的字典问题
2022/04/12 Vue.js
MySQL去除密码登录告警的方法
2022/04/20 MySQL
Redis唯一ID生成器的实现
2022/07/07 Redis