django內置的url轉換器,包括有int、str、uuid等等。但是有時候他們不能滿足我們的需求,因此就需要使用自定義url轉換器。自定義url轉換器的五步:1、定義一個類,直接繼承自object就可以2、在類中定義一個屬性regex,這個屬性是用來限制url轉換器規則的正則表達式。3、實現to ...
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'),