一周学会Django5 Python Web开发-Django5路由命名与反向解析reverse与resolve

本文主要是介绍一周学会Django5 Python Web开发-Django5路由命名与反向解析reverse与resolve,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

锋哥原创的Python Web开发 Django5视频教程:

2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计25条视频,包括:2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~、第2讲 Django5安装、第3讲 Django5创建项目(用命令方式)等,UP主更多精彩视频,请关注UP账号。icon-default.png?t=N7T8https://www.bilibili.com/video/BV14Z421z78C/我们在urls.py里定义的路由信息,有时候需要动态获取路由信息,然后进行一些处理,统计,日志等操作,这时候我们需要在其他代码里用到路由信息,比如views.py,后面要学到的模型models.py,Admin系统等,因此我们引入路由反向解析reverse与resolve方法,再使用这两个方法前,我们还需要给路由取名,否则我们无法找到我们需要的那个路由的信息。reverse方法根据路由名称得到路由地址,resolve方法根据路由地址得到路由所有信息。

我们先举一个简单例子来体会下吧。

在order项目的urls.py里,我们对index/和list/请求路由分别取名index和list

然后修改views.py的index方法:

def index(request):route_url = reverse('order:index')print("reverse反向解析得到路由地址:" + route_url)result = resolve(route_url)print("resolve通过路由地址得到路由信息:" + str(result))return HttpResponse("订单信息")

我们运行请求:

http://127.0.0.1:8000/order/index/

控制台输出:

reverse反向解析得到路由地址:/order/index/
resolve通过路由地址得到路由信息:ResolverMatch(func=order.views.index, args=(), kwargs={}, url_name='index', app_names=['order'], namespaces=['order'], route='order/index/')

resolve返回对象属性介绍:

函数方法说明
func路由的视图函数对象或视图类对象
args以列表格式获取路由的变量信息
kwargs以字典格式获取路由的变量信息
url_name获取路由命名name
app names与app name功能一致,但以列表格式表示
namespaces与namespace功能一致,但以列表格式表示
route获取整个路由的名称,包括命名空间

这里我们在修改下项目,来讲下参数的运用。

order的urls.py的list请求加下年月日路由变量

path('list/<int:year>/<int:month>/<int:day>/', views.list, name="list")

对应的views.py的list方法我们也进行修改,要加上三个路由变量

def list(request, year, month, day):kwargs = {'year': year - 1, 'month': month + 1, 'day': day}args = [year, month, day]# route_url = reverse('order:list', args=args)route_url = reverse('order:list', kwargs=kwargs)print("reverse反向解析得到路由地址:" + route_url)result = resolve(route_url)print("resolve通过路由地址得到路由信息:" + str(result))return HttpResponse("订单列表")

进行反向解析路由的时候,我们也可以带上路由实参,可以通过kwargs字典键值对,也可以通过args元组;

测试请求地址:http://127.0.0.1:8000/order/list/2010/11/11/

控制台输出:

reverse反向解析得到路由地址:/order/list/2009/12/11/
resolve通过路由地址得到路由信息:ResolverMatch(func=order.views.list, args=(), kwargs={'year': 2009, 'month': 12, 'day': 11}, url_name='list', app_names=['order'], namespaces=['order'], route='order/list/<int:year>/<int:month>/<int:day>/', captured_kwargs={'year': 2009, 'month': 12, 'day': 11})

点开reverse方法:

必须参数viewname,以及一些可选参数:

  • viewname:代表路由命名或可调用视图对象,一般情况下是以路由命名name来生成路由地址的。

  • urlconf:设置反向解析的URLconf模块。默认情况下,使用配置文件 settings.py 的ROOT_URLCONF属性( 主项目文件夹的urls.py ).

  • args:以列表方式传递路由地址变量,列表元素顺序和数量应与路由地址变量的顺序和数量一致。

  • kwargs:以字典方式传递路由地址变量,字典的键必须对应路由地址变量名,字典的键值对数量与变量的数量一致。

  • current app:提示当前正在执行的视图所在的项目应用,主要起到提示作用,在功能上并无实质的作用。

点开resolve方法:

就两个参数:

  • path:代表路由地址,通过路由地址来获取对应的路由对象信息。

  • urlconf:设置反向解析的_URLconf模块。默认情况下,使用配置文件 settings.py 的ROOT_URLCONF属性( 主项目文件夹的urls.py ).

这篇关于一周学会Django5 Python Web开发-Django5路由命名与反向解析reverse与resolve的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/735358

相关文章

Python结合PyWebView库打造跨平台桌面应用

《Python结合PyWebView库打造跨平台桌面应用》随着Web技术的发展,将HTML/CSS/JavaScript与Python结合构建桌面应用成为可能,本文将系统讲解如何使用PyWebView... 目录一、技术原理与优势分析1.1 架构原理1.2 核心优势二、开发环境搭建2.1 安装依赖2.2 验

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思

使用Java将DOCX文档解析为Markdown文档的代码实现

《使用Java将DOCX文档解析为Markdown文档的代码实现》在现代文档处理中,Markdown(MD)因其简洁的语法和良好的可读性,逐渐成为开发者、技术写作者和内容创作者的首选格式,然而,许多文... 目录引言1. 工具和库介绍2. 安装依赖库3. 使用Apache POI解析DOCX文档4. 将解析

一文详解如何在Python中从字符串中提取部分内容

《一文详解如何在Python中从字符串中提取部分内容》:本文主要介绍如何在Python中从字符串中提取部分内容的相关资料,包括使用正则表达式、Pyparsing库、AST(抽象语法树)、字符串操作... 目录前言解决方案方法一:使用正则表达式方法二:使用 Pyparsing方法三:使用 AST方法四:使用字

Java字符串处理全解析(String、StringBuilder与StringBuffer)

《Java字符串处理全解析(String、StringBuilder与StringBuffer)》:本文主要介绍Java字符串处理全解析(String、StringBuilder与StringBu... 目录Java字符串处理全解析:String、StringBuilder与StringBuffer一、St

Python列表去重的4种核心方法与实战指南详解

《Python列表去重的4种核心方法与实战指南详解》在Python开发中,处理列表数据时经常需要去除重复元素,本文将详细介绍4种最实用的列表去重方法,有需要的小伙伴可以根据自己的需要进行选择... 目录方法1:集合(set)去重法(最快速)方法2:顺序遍历法(保持顺序)方法3:副本删除法(原地修改)方法4:

Spring Boot循环依赖原理、解决方案与最佳实践(全解析)

《SpringBoot循环依赖原理、解决方案与最佳实践(全解析)》循环依赖指两个或多个Bean相互直接或间接引用,形成闭环依赖关系,:本文主要介绍SpringBoot循环依赖原理、解决方案与最... 目录一、循环依赖的本质与危害1.1 什么是循环依赖?1.2 核心危害二、Spring的三级缓存机制2.1 三

Python运行中频繁出现Restart提示的解决办法

《Python运行中频繁出现Restart提示的解决办法》在编程的世界里,遇到各种奇怪的问题是家常便饭,但是,当你的Python程序在运行过程中频繁出现“Restart”提示时,这可能不仅仅是令人头疼... 目录问题描述代码示例无限循环递归调用内存泄漏解决方案1. 检查代码逻辑无限循环递归调用内存泄漏2.

Python中判断对象是否为空的方法

《Python中判断对象是否为空的方法》在Python开发中,判断对象是否为“空”是高频操作,但看似简单的需求却暗藏玄机,从None到空容器,从零值到自定义对象的“假值”状态,不同场景下的“空”需要精... 目录一、python中的“空”值体系二、精准判定方法对比三、常见误区解析四、进阶处理技巧五、性能优化

C#中async await异步关键字用法和异步的底层原理全解析

《C#中asyncawait异步关键字用法和异步的底层原理全解析》:本文主要介绍C#中asyncawait异步关键字用法和异步的底层原理全解析,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录C#异步编程一、异步编程基础二、异步方法的工作原理三、代码示例四、编译后的底层实现五、总结C#异步编程