实现一个获取文章列表的demo,用户能够根据/articles/文章分类/
的方式来获取文章。其中文章分类采用的是分类1+分类2+分类3...
的方式拼接的,而且若是只有一个分类,那就不须要加号。示例以下:python
# 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
的形式。django
以前已经学到过一些django内置的url转换器,包括有int、uuid等。有时候这些内置的url转换器并不能知足咱们的需求,所以django给咱们提供了一个接口能够让咱们本身定义本身的url转换器。flask
自定义url转换器按照如下五个步骤来走就能够了:函数
django.urls.converters.register_converter
方法注册到django中。示例代码以下:ui
from django.urls import register_converter class CategoryConverter(object): regex = r'\w+|(\w+\+\w+)+' def to_python(self,value): # python+django+flask # ['python','django','flask'] result = value.split("+") return result def to_url(self,value): # value:['python','django','flask'] # python+django+flask if isinstance(value,list): result = "+".join(value) return result else: raise RuntimeError("转换url的时候,分类参数必须为列表!") register_converter(CategoryConverter,'cate')