在項目中,有時間需要前端傳遞特定類型的參數過來,比如說int。那麼此時就需要用到Django內置的url轉換器,它可以把傳遞過來的參數轉換成指定的類型
首先看下源碼
from django.urls import converters
,
進入converters類,可看到提供了5種可轉換類型:
DEFAULT_CONVERTERS = {
'int': IntConverter(),
'path': PathConverter(),
'slug': SlugConverter(),
'str': StringConverter(),
'uuid': UUIDConverter(),
}
IntConverter()
:可傳遞任意整數- [0-9]整形數字
- +一個或多個
class IntConverter:
regex = '[0-9]+'
def to_python(self, value):
return int(value)
def to_url(self, value):
return str(value)
PathConverter()
:可傳遞任意字符串、符號等- .:任意字符
- +:一個或多個
class PathConverter(StringConverter):
regex = '.+'
SlugConverter()
- ‘[-a-zA-Z0-9_]+’:由-或a-z或A-Z或0-9或_中的一個或多個組成的字符串 ;
class SlugConverter(StringConverter):
regex = '[-a-zA-Z0-9_]+'
StringConverter()
:默認的轉換器
- [^/]+:除了/之外的都可以
class IntConverter:
regex = '[0-9]+'
def to_python(self, value):
return int(value)
def to_url(self, value):
return str(value)
UUIDConverter()
:
- [0-9a-f]:表示只能是0到9之間的任意整形數字和a-f 之間的字母
- {8}:表示只能有8個這樣的字母或者數字。
- -即指定了這個字符,必須使用它,整個字符竄的意思就是8個[0-9a-f],後面用一個-連接
- 後面的以此類推
'int': IntConverter()
:一個或多個整數(0-9)
'path': PathConverter()
:所有字符串
'slug': SlugConverter()
:英文中的橫杆或者英文字符或者阿拉伯數字或者下劃線
'str': StringConverter()
: 除了斜槓/以外的所有字符
'uuid': UUIDConverter()
:只有滿足uuid形式的字符串
例子:
例子
- 在
project1/views.py
添加一個視圖方法,用於接收id
參數並返回
def getId(request,id):
return HttpResponse(F'id是{id}')
- 在
project1/urls.py
添加對應的映射
path(r'getId/<int:id>',views.getId,name="getId")
3.訪問http://localhost:8000/project1/get_id/3
如果參數不是整數,傳遞過去後無法轉換成int類型,則會404,比如訪問http://localhost:8000/project1/get_id/8.2