当前位置: 首页 > 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.lryc.cn/news/491318.html

相关文章:

  • 【JavaEE初阶】枫叶经霜艳,梅花透雪香-计算机是如何运行的?
  • 破解天然气巡检挑战,构建智能运维体系
  • go web单体项目 学习总结
  • Cocos游戏优化
  • wsl2的Ubuntu18.04安装ros和anaconda
  • 基于迅为RK3568开发板全国产平台,快速实现APP开机自启动技术分享
  • C++网络编程之多播
  • 不只是请求和响应:使用Fiddler抓包URL和Method全指南(中)
  • 学习threejs,使用设置normalMap法向量贴图创建更加细致的凹凸和褶皱
  • Hive构建日搜索引擎日志数据分析系统
  • Vue 3 defineModel: 简化组件的双向绑定
  • 【Flutter】搭建Flutter开发环境,安卓开发
  • Linux中的共享内存
  • SpringBoot中忽略实体类中的某个属性不返回给前端的方法
  • ubuntu 安装proxychains
  • pytorch四种单机多卡分布式训练方法
  • archlinux 触摸板手势配置
  • djinn:1 靶场学习小记
  • kafka消费者组和分区数之间的关系是怎样的?
  • 【go】查询某个依赖是否存在于这个代理
  • 如何从postman中导出所有集合Collection
  • 在 Spring Boot 中实现多种方式登录(用户名、手机号、邮箱等)的不正经指南
  • .NET平台用C#添加动作到PDF文档
  • 大数据治理:概念、框架与实践应用
  • Vue.observable 全解析:Observable 是什么及使用场景剖析
  • MySQL基础知识大总结
  • 池化技术、Commons Pool介绍
  • 下载并安装Visual Studio 2017过程
  • 菊风视频能力平台开发服务正式入驻华为云云商店,成为华为云联营联运合作伙伴
  • springboot整合kafka