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

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 value

    def to_url(self, value):
        # 返回适合插入到 URL 中的字符串
        return value


全局注册

from django.urls.converters import DEFAULT_CONVERTERS



# 注册转换器到全局转换器集合
DEFAULT_CONVERTERS['nonum'] = NonumConverter

局部注册

from django.urls import register_converter

register_converter(NonumConverter, 'nonum')

示例

创建转换器

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

# converters.py


class 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 HttpResponse

def year_view(request, year):
    return HttpResponse(f"The year is {year}.")


反向解析

from django.urls import reverse

url = reverse('year', kwargs={'year': 2024})
print(url)  # 输出:/year/2024/



http://www.kler.cn/a/410266.html

相关文章:

  • 即时通讯服务器被ddos攻击了怎么办?
  • C++《二叉搜索树》
  • 多模态大型语言模型(MLLM)综述
  • 智慧社区管理系统平台提升物业运营效率与用户体验
  • 使用脚本实现hadoop-yarn-flink自动化部署
  • Javascript高级—深入JS模板字符串的高级用法
  • 以科学计算为切入点:剖析英伟达服务器过热难题
  • 函数和数组
  • SAP 零售方案 CAR 系统的介绍与研究
  • 2024年11月25日Github流行趋势
  • 李宏毅机器学习课程知识点摘要(1-5集)
  • 深度解析:Nginx模块架构与工作机制的奥秘
  • FPGA经验谈系列文章——9、块储存器的高效使用
  • Enhancing K8s Gateway API with Easegress Without Changing a Single Line of Code
  • 【数据结构】通过对比二叉查找树、平衡二叉树和B树,对MySQL中的B+树讲解
  • 企业OA管理系统:Spring Boot技术架构与应用
  • Spring Boot英语知识网站:开发与优化
  • AI服务器核心部件产业链升级分析
  • mac终端配置-支持 git branch
  • 数字图像处理(4):FPGA中的定点数、浮点数
  • wsl2的Ubuntu18.04安装ros和anaconda
  • 后端开发详细学习框架与路线
  • 基于python的机器学习(三)—— 关联规则与推荐算法
  • 3D可视化产品定制,打造“所见即所得”的购物体验!
  • FPGA实现串口升级及MultiBoot(九)BPI FLASH相关实例演示
  • sql工具!好用!爱用!