Django从理论到实战(part15)--自定义path转换器
学习笔记,仅供参考
参考自:Django打造大型企业官网;
本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列中,尽量详细的写一下。
自定义path转换器
path转换器
记得我们以前学习path函数时用的 <int:id>
么 ,其中的int就是path转换器,它的底层实现是这样的:
class IntConverter:regex = '[0-9]+'def to_python(self, value):return int(value)def to_url(self, value):return str(value)
在这个IntConverter类中它有三个组成部分:
第一部分(regex):正则表达式限制路由规则,在这里,Django规定只能输入数字;
第二部分(to_python):将得到的路径按照一定的规则,转换成统一类型,返回给服务端,在这里,Django将url中得到的str类型参数,转换为int类型参数传递给视图函数;
第三部分(to_url):在进行url反转时,视图函数会将某个形式的数据,转换为特定形式的参数,并将其传递给特定的路由,在这里,Django会将int类型参数转换为str类型的参数,并将str类型的参数传递给特定的路由。
to_python方法相当于做了与to_url方法相反的工作。
自定义path转换器
现在,我想在url中以书名1+书名2+书名3
的方式传递参数,并在视图函数中以列表的形式拿到参数,即[书名1, 书名2, 书名3]
首先,在newwebsite1项目下,我们创建converters.py文件,并该模块中放我们的自定义path转换器类:
from django.urls import converters,register_converterclass CategoryConverter(object):regex = r'\w+|(\w+\+\w+)+'def to_python(self,value):# python+django+flask# ['python','django','flask']result = value.split("+")return resultdef to_url(self,value):# value:['python','django','flask']# python+django+flaskif isinstance(value,list):result = "+".join(value)return resultelse:raise RuntimeError("转换url的时候,分类参数必须为列表!")register_converter(CategoryConverter,'cate')
#注册
#CategoryConverter为自定义path转换器类
#cate为我们给自定义path转换器起的类名
那么我们该如何让这个自定义path转换器生效呢?
我们知道 __init__.py
模块用于初始化包,即当我们导入某个包时,python就会执行 __init__.py
文件,所以,我们可以将converters.py模块导入到__init__.py
模块中:
from . import converters
当我们导入converters.py模块时,python就会马上执行converters.py文件中的代码,我们的自定义path转换器就会被注册。
现在,我们在主urls.py中敲入如下代码:
from django.contrib import admin
from django.urls import path, converters
from . import views
from django.conf.urls import includeurlpatterns = [path('admin/', admin.site.urls),path('', views.baidu),path('login/', views.login, name = "signin"),path('book/', include('book.urls')),path('cms1/', include('cms.urls', namespace = "cms1")),path('cms2/', include('cms.urls', namespace = "cms2")),path('front/', include('front.urls')),path('test01/<cate:my_books>/', views.test01),
]
views.py中定义视图函数:
def test01(request, my_books):html = "<h2>我有如下书籍:{}</h2>".format(my_books)return HttpResponse(html)
我们向服务器发起请求:
Very Well !
Django从理论到实战(part15)--自定义path转换器相关推荐
- Django从理论到实战(part21)--自定义模板过滤器
学习笔记,仅供参考 参考自:Django打造大型企业官网–Huang Y: 本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列 ...
- Django从理论到实战(part41)--WSGIRequest对象
学习笔记,仅供参考,有错必纠 参考自:Django打造大型企业官网–Huang Y: 文章目录 WSGIRequest对象 WSGIRequest对象常用属性 WSGIRequest对象常用方法 WS ...
- Django从理论到实战(part8)--URL中添加参数
学习笔记,仅供参考 参考自:Django打造大型企业官网: 本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列中,尽量详细的写 ...
- Django从理论到实战(part9)--path和re_path
学习笔记,仅供参考 参考自:Django打造大型企业官网: 本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列中,尽量详细的写 ...
- Django从理论到实战(part25)--数据库操作
学习笔记,仅供参考 参考自:Django打造大型企业官网–Huang Y: 本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列 ...
- Django从理论到实战(part7)--关于视图函数与URL映射
学习笔记,仅供参考 参考自:Django打造大型企业官网:URL映射 本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列中,尽 ...
- Django从理论到实战(part54)--MEDIA_ROOT和MEDIA_URL
学习笔记,仅供参考,有错必纠 引用:使用模型来处理上传的文件:Django static静态配置文件 MEDIA_ROOT和MEDIA_URL 变量解释 MEDIA_ROOT:指定用户上传文件的本地路 ...
- Django从理论到实战(part50)--使用模型来处理上传的文件
学习笔记,仅供参考,有错必纠 文章目录 使用模型来处理上传的文件 `MEDIA_ROOT`和`MEDIA_URL` 限制文件的扩展名 使用模型来处理上传的文件 在定义模型的时候,我们可以给存储文件的字 ...
- Django从理论到实战(part48)--Django表单
学习笔记,仅供参考,有错必纠 参考自:某网课 文章目录 Django表单 Django表单概述 HTML中的表单 Django中的表单 Django中表单使用流程 表单验证 常用的Field 常用验证 ...
最新文章
- 您现在只需免费与相机捆绑即可购买一个PSVR
- CTFshow 命令执行 web120
- 如何用Linux的命令正确识别cpu的个数和核数
- 如何使用RichEdit
- SyntaxError: ‘return‘ outside function 在python里面的报错问题
- C语言,利用条件语句判断是否为三角形并输出面积
- 使用 Kustomize 帮你管理 kubernetes 应用(二): Kustomize 的使用方法
- 洛谷 P3396 哈希冲突 解题报告
- Ubuntu 下 libev编译安装
- pycocotools/_mask.c:no such file or directory
- Cocos2d JS 之消灭星星(十) 关卡配置
- jQuery学习笔记03
- linux 截图软件安装,Ubuntu 安装截图工具Shutter,并设置快捷键 Ctrl+Alt+A
- 苹果手机左上角的数字怎么弄_一键更改手机IP操作方法
- Andriod7.0之wifi开启流程(含流程框图及流程图)
- 推荐一个有效清理电脑桌面广告、流氓软件的方法
- php无版权图库api,12个无版权限制的大图特供网站_交互设计教程
- linux raid 监控,如何使用CentOS 6监控Dell PERC H710 Raid控制器背后的硬盘状态?
- [渝粤教育] 长沙民政职业技术学院 高职公共英语(三) 参考 资料
- linux服务器开机管理,中标麒麟Linux服务器操作系统启动管理(29页)-原创力文档...