Django --自定义path转换器

自定义URL转换器:


相信之前已经了解到过一些django内置的url转换器,包括有int、uuid,等。 有时候这些内置的url转换器并不能满足我们的需求,因此django给我们提供了一个接口可以让我们自己定义自己的url转换器。

 


自定义url转换器按照以下五个步骤来走就可以了:


1.定义一个类,直接继承自object就可以了.
2.在类中定义一个属性regex,这个属性是用来限制url转换器规则的正则表达式。
3.实现to_python(self ,value)方法,这个方法是将ur1中的值转换一下, 然后传给视图函数的。
4.实现to_url(self,value)方法,这个方法是在做ur1反转的时候,将传进来的参数转换后拼接成一个正确的url。
5.将定义好的转换器,使用django.urls.converters.register_converter 方法注册到django中。

 

比如需求:
实现一个获取文章列表的demo,用户可以根据/articles/文章分类/的方式来获取文章。其中文章分类采用的是“分类1+分类2+分类3..."的方式拼接的,并且如果只有一个分类,那就不需要加号。示例如下:
1. 第一种:获取python分类下的文章
/articles/python/

2.第二种:获取python和django分类下的文章
/articles/python+django/

3.第三种:获取python和django和flask分类下的文章
/articles/python+django+flask/
以此类推...

在“文章分类”参数传到视图函数之前要把这些分类分开来存储到列表中。比如参数是“python+django",那么传到视图函数的时候就要变成“[ 'python', 'django']”,以后在使用reverse反转的时候,限制传递“文章分类”的参数应该是一个列表,并且要将这个列表变成“python+django"的形式。

 

代码如下:

定义一个converter.py文件

from django.urls import converters, register_converter

class CateConverter(object):
    regex = r'\w+|(\w+\+\w+)+'

    def to_python(self, value):
        value = value.split('+')
        return value

    def to_url(self, value):
        if isinstance(value, list):
            value = '+'.join(value)
            return value
        else:
            raise RuntimeError('URL转换超时')

register_converter(CateConverter, 'cate')

 

在该app目录下的__init__.py文件中注册converter.py文件,否则该文件永远不会获得执行。

from . import converter

 

并且在urls.py中添加path:  path('articles/<cate:categories>/', views.func名称)

 


 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值