zoukankan      html  css  js  c++  java
  • django 自定义url转换器

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

    例如在查询文章分类时:url连接类型为:127.0.0.1:8000/article/python+django+pandas/

    在app根目录创建converter.py文件

    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中添加:

    from . import converters

    在urls.py中使用即可,如:

    path('article/<cate:classify>',views.article_classify_list,name='article_classify'),
  • 相关阅读:
    Python基础 2----Python 基础语法
    安卓开发35:一些安卓设计经验总结
    HDU 4707 Pet(DFS(深度优先搜索)+BFS(广度优先搜索))
    对象数组
    Mac与Window之间的共享文件
    实用数据结构总结之二叉树遍历
    csdn的登录框好难看
    图像切割性能评价
    基于Solr的HBase实时查询方案
    图片的缩放源码与使用
  • 原文地址:https://www.cnblogs.com/xshan/p/12081432.html
Copyright © 2011-2022 走看看