django 自定义url转换器

django内置的url转换器,包括有int、str、uuid等等。可是有时候他们不能知足咱们的需求,所以就须要使用自定义url转换器。
自定义url转换器的五步:
一、定义一个类,直接继承自object就能够
二、在类中定义一个属性regex,这个属性是用来限制url转换器规则的正则表达式。
三、实现to_python(self,value)方法,这个方法是将url中的值转换下,而后传给视图函数的。
四、实现to_url(self,value)方法,这个方法是在作url反转的时候,将传进来的参数转换后拼接成一个正确的url。
五、将定义好的转换器,使用'django.urls.converters.register_converter'方法注册到django中。python

例如在查询文章分类时:url链接类型为:127.0.0.1:8000/article/python+django+pandas/正则表达式

在app根目录建立converter.py文件django

from django.urls import register_converter


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

    def to_python(self, value):
        # 将url里的'python+django+pandas'转换成:['python', 'django', 'pandas']传给视图函数
        result = value.split('+')
        return result

    def to_url(self, value):
        if isinstance(value, list):
            # 将视图函数里的['python', 'django', 'pandas']转换成'python+django+pandas'传给URL
            result = '+'.join(value)
            return result
        else:
            raise RuntimeError('转换url的时候,分类参数必须为列表')

# register_converter(上面本身定义的类名,自定义的类型名(在urls.py文件中使用))
register_converter(CategoryConverter, 'cate')

在app根目录下的__init__.py中添加:app

from . import converters

在urls.py中使用便可,如:函数

path('article/<cate:classify>',views.article_classify_list,name='article_classify'),
相关文章
相关标签/搜索