当前位置: 首页 > news >正文

Django 自定义路由转换器

步骤

  1. 创建自定义转换器类

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

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

 转换器导包
from django.urls import converters

 定义 一个匹配非数字的


# 导入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

全局注册

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

局部注册

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

示例

创建转换器

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

# 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 中注册自定义转换器:

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'),
]

视图函数

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

反向解析

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


http://www.mrgr.cn/news/78043.html

相关文章:

  • 李宏毅机器学习课程知识点摘要(1-5集)
  • 空间注意力网络的性能优化与多维评估
  • MySQL-- 数据类型
  • 03 —— Webpack 自动生成 html 文件
  • 应急响应靶机——linux2
  • 瑞佑液晶控制芯片RA6807系列介绍 (三)软件代码详解 Part.10(让PNG图片动起来)完结篇
  • 免费下载 | 2025中国5G产业全景图谱报告
  • Leetcode647. 回文子串(HOT100)
  • 【可解释性机器学习】基于SHAP进行特征选择和贡献度计算
  • AI-Talk开发板之Camera
  • OpenCV基础(3)
  • 优化Docker镜像:提升部署效率与降低资源消耗
  • Spring Boot 与 Java 决策树:构建智能分类系统
  • 数字逻辑(一)——导论
  • 241125学习日志——[CSDIY] [ByteDance] 后端训练营 [18]
  • 车载摄像camera基础知识和评估
  • 2024年底-Arch linux或转为0BSD许可证!
  • 打造智能扩容新纪元:Kubernetes Custom Metrics深度解析
  • Vue 修饰符的作用与应用,应用场景详细介绍
  • 栈、队列、链表
  • 241124学习日志——[CSDIY] [ByteDance] 后端训练营 [14]
  • 传输控制协议(TCP)和用户数据报协议(UDP)
  • WebSocket 常见问题及解决方案
  • MySQL的UPDATE(更新数据)详解
  • Sickos1.1 详细靶机思路 实操笔记
  • 10、PyTorch autograd使用教程