當我們需要用url傳遞一些引數的時候,我們用《變數》來進行傳參,例如下面**:
path('tiaozhuan/', views.tiaozhuan, name='gohere'),
但是url是乙個字串型別,我們如果想講引數以int型別,list型別傳進去呢,這個時候就需要自定義url轉換器了,如下:
path('getlist//', views.get_list, name='list1'),
這個cate型別等會講,這個是我自定義的乙個將str轉list型別的轉換器
當然轉換器是可以互相轉化的,reserve函式也可以同時呼叫轉化器完成轉換
django有好多內建的轉換器,這個工作原理就是在url字串型別(訪問**)和其他型別(傳參進函式進行運算)之間相互轉換
如果有不明白推薦大家開啟converters方法的原始檔進行檢視,我們可以看到兩個函式to_python和to_str就是完成的這個工作,如下:
class
intconverter
: regex =
'[0-9]+'
defto_python
(self, value)
:return
int(value)
defto_url
(self, value)
:return
str(value)
匯入內建的轉換器:from django import converters
我們已經了解它的應用場景和原理了,現在我們自己來製作乙個轉換器,一共有4步
second step
在這個檔案寫入轉換器轉換的規則例如下:
from django.urls import converters,register_converter
#這個類的用處就是在瀏覽器中url只能為str型別,而reserve傳參需要將其他型別變成str型別,
#同理,將url中的字串中的資料當做引數傳入函式運算時需要變成其他相應型別。
#自定義url轉換器,在這裡我們將 liabi+luban+pangu 一類的字串和列表之間進行相互轉化
class
categoryconverter
(object):
regex = r'\w+|(\w+\+\w+)+'
defto_python
(self, value)
:#將字串轉化為引數
#libai+luban+pangu
#['libai','luban','pangu']
result = value.split(
"+")
return result
defto_url
(self, value)
:#反過來,用於reverse反轉函式傳參
ifisinstance
(value,
list):
result =
"+".join(value)
return result
else
:raise runtimeerror(
"轉化url的時候,分類引數必須為列表!"
)#註冊上面寫的類
register_converter(categoryconverter,
'cate'
)
這裡演示的是將libai+luban+pangu這一類字串(中間帶+號或者單個字串)進行匹配,regex為正規表示式
register_converter:用來註冊寫好的這個類
third step超級重要,不然run不了別罵我
forth step
在views.py檔案中寫入函式**:
"這是首頁"
"得到英雄列表為%s"
%hero_name)在urls.py檔案中寫入路由**
from django.urls import path,re_path
from
.import views
#from django.urls import converters,register_converter
urlpatterns=
[ path(
'', views.index)
, path(
'getlist//'
, views.get_list, name=
'list1'),
]
Django 自定義標籤
模版是乙個用django模版語言標記過的python字串。模版可以包含模版標籤和變數。模版標籤是在乙個模版裡起作用的標記。比如,乙個模版標籤可以產生控制結構的內容 if或者for 可以獲取資料庫內容或者訪問其它模版標籤。乙個標籤塊被包圍 變數標籤被 包圍 context是乙個傳遞給模版的key va...
Django自定義函式
templates 母版.html 引入 extends include 自定義函式 simpla tag 2.任意python檔案 a.from django import template from django.utils.safestring import mark safe registe...
django自定義Color Picker控制項
django提供了豐富的部件,以滿足我們對各種html控制項的需求。並且如果有特別的要求,我們還可以很容易的編寫自己的控制項,本文主要內容是自定義乙個顏色選擇器的控制項,該控制項是在input的基礎上,實現顏色的選擇和展示。如果你不知道如何實現自定義django的form控制項的話,可以檢視djan...