自定义Django(2.0)中的URL转换器
在django项目中常常写路径时会定义传入参数的类型如:
path('books/<int:book_id>',views.book)
去converters这个库去查看时发现只有五种默认类型’int’,‘path’,‘slug’, ‘str’,‘uuid’,但我们自己有自定义的需求类型时就可以自己写.
自写的类型是:book
在url地址中输入:http://127.0.0.1:8000/index/list/django+flask+python/
views中写为:
def list(request,categories):
text = '该图书的种类是%s'%categories
print(reverse('list',kwargs={'categories':categories}))
return HttpResponse(text)
然后在urls中:
class BookConverter(object):
regex = r'\w+|(\w+\+\w+)+'
def to_python(self,value):
result = value.split('+')
return result
def to_url(self,value):
if isinstance(value,list):
res = '+'.join(value)
return res
else:
raise RuntimeError('转化url时格式错误')
然后将其注册为‘book’
register_converter(BookConverter,'book')
应用
path('list/<book:categories>/',views.list,name='list')
在网页中显示:
在终端中显示:
这样就完成了自己的URL转换器。