Django 自定义路由转换器

embedded/2024/11/29 16:12:31/

步骤

  1. 创建自定义转换器类

    • 必须定义 regex 属性(用于匹配参数)。
    • 必须实现 to_pythonto_url 方法。
      • to_python: 将匹配的参数转换为视图函数可用的 Python 数据。
      • to_url: 将数据转换为 URL 格式(用于反向解析)。
  2. 注册转换器

    • 使用 register_converter 将自定义转换器注册到 Django 的路由系统。
  3. 在路由中使用转换器

 转换器导包
python">from django.urls import converters

 定义 一个匹配非数字的

python">
# 导入StringConverter 转换器
from django.urls.converters import StringConverter# 继承StringConverter 直接定义或者修改方法
class NonumConverter(StringConverter):regex = r"[^\d]+"  # 匹配一个或多个非数字字符def to_python(self, value):# URL 参数直接作为字符串返回return valuedef to_url(self, value):# 返回适合插入到 URL 中的字符串return value

全局注册

python">from django.urls.converters import DEFAULT_CONVERTERS# 注册转换器到全局转换器集合
DEFAULT_CONVERTERS['nonum'] = NonumConverter

局部注册

python">from django.urls import register_converterregister_converter(NonumConverter, 'nonum')

示例

创建转换器

假设需要自定义一个转换器 FourDigitYearConverter,用于匹配四位年份。

python"># converters.pyclass FourDigitYearConverter:regex = r'\d{4}'  # 匹配四位数字def to_python(self, value):return int(value)  # 转换为整数def to_url(self, value):return f"{value:04d}"  # 确保是四位数字
注册转换器

urls.py 中注册自定义转换器:

python">from django.urls import path, register_converter
from . import converters, views# 注册转换器
register_converter(converters.FourDigitYearConverter, 'yyyy')urlpatterns = [path('year/<yyyy:year>/', views.year_view, name='year'),
]

视图函数

python">from django.http import HttpResponsedef year_view(request, year):return HttpResponse(f"The year is {year}.")

反向解析

python">from django.urls import reverseurl = reverse('year', kwargs={'year': 2024})
print(url)  # 输出:/year/2024/


http://www.ppmy.cn/embedded/141520.html

相关文章

React Native 应用程序测试指南

写在前面 在软件开发中&#xff0c;测试是确保应用程序质量和稳定性的关键步骤。对于 React Native 应用程序来说&#xff0c;测试同样重要。它可以帮助你发现和修复错误&#xff0c;提高代码的可靠性和可维护性&#xff0c;并加速开发过程。本文将详细介绍如何在 React Nativ…

CListCtrl::InsertItem和临界区导致程序卡死

1.示例代码 MFCApplication1Dlg.h // MFCApplication1Dlg.h : 头文件 //#pragma once #include "afxcmn.h"// CMFCApplication1Dlg 对话框 class CMFCApplication1Dlg : public CDialogEx { // 构造 public:CMFCApplication1Dlg(CWnd* pParent NULL); // 标准构造…

Burp入门(3)-爬虫功能介绍

声明&#xff1a;学习视频来自b站up主 泷羽sec&#xff0c;如涉及侵权马上删除文章 感谢泷羽sec 团队的教学 视频地址&#xff1a;burp功能介绍&#xff08;1&#xff09;_哔哩哔哩_bilibili 本文介绍burp的主动爬虫和被动爬虫功能。 一、主动爬虫 工作原理&#xff1a; 主动…

【Git】Git 完全指南:从入门到精通

Git 完全指南&#xff1a;从入门到精通 Git 是现代软件开发中最重要的版本控制工具之一&#xff0c;它帮助开发者高效地管理项目&#xff0c;支持分布式协作和版本控制。无论是个人项目还是团队开发&#xff0c;Git 都能提供强大的功能来跟踪、管理代码变更&#xff0c;并保障…

Matlab Simulink 电力电子仿真-单相电压型半桥逆变电路分析

目录 一、单相电压型半桥逆变电路仿真模型 1.电路模型 2.电路模型参数 二、仿真分析 三、总结 1.优缺点 2.应用场景 一、单相电压型半桥逆变电路仿真模型 1.电路模型 单相电压型半桥逆变电路是一种常见的逆变电路&#xff0c;主要用于将直流电源转换为交流电源。 &…

【ubuntu24.04】GTX4700 配置安装cuda

筛选显卡驱动显卡驱动 NVIDIA-Linux-x86_64-550.135.run 而后重启:最新的是12.6 用于ubuntu24.04 ,但是我的4700的显卡驱动要求12.4 cuda

python分析wireshark文件

1 pyshark库 支持wireshark的解析等。 安装pyshark pip install pyshark2 dpkt库 这也是一个用于分析pcap文件的库&#xff0c;是所有分析pcap库中最快的一个。 官方参考文档&#xff1a; https://dpkt.readthedocs.io/en/latest/print_packets.html https://dpkt.readthe…

【Laravel】存储仓Repository基础

laravel 存储仓基础 laravel存储仓基础创建存储仓手动创建存储仓创建接口创建接口实现测试接口 Criteria 封装查询逻辑的模式作用使用场景 使用示例封装商品排序逻辑封装商品状态过滤逻辑业务逻辑封装创建测试控制器测试与结果 laravel存储仓基础 本文基于 Laravel 9.* 版本&a…