21 自定義path 轉換器

2021-10-02 04:38:00 字數 3291 閱讀 9242

1.在url進行傳遞引數給檢視函式之前,首先交給路徑轉換器將引數的型別進行轉換,預設的情況下,引數的型別為str,路徑轉換器中的函式to_python()函式將引數型別進行轉換。之後將轉變之後的引數傳遞給檢視函式。

2.而to_url函式就是將檢視函式中的,reverse()函式傳進來的引數進行轉換為str型別,之後將得到url進行拼接.

示例**如下:

views.py檔案中

"文章首頁"

urls.py檔案中檢視函式與url之間的對映,

from django.urls import re_path,path

from article import views

urlpatterns =

[ path(

"",views.article, name =

'article'),

# 其中\w表示的是,0-9,a-z,a-z,_等

# 使用re_path()函式,定義url

re_path(r"^list/(?p\w+|(\w+\+\w+)+)/$"

,views.article_list)

, path(

'detail/'

,views.article_detail, name =

'detail'

)]

在瀏覽器中進行檢視:

以上我們已經定義好了url的正規表示式,因此接下來就可以將定義好的正規表示式定義為自己的轉換器,並且實現以下功能:

3.在「文章分類」引數傳遞到檢視函式之前要把這些分類分開進行儲存到列表中,比如引數是「python+django」,那麼傳到檢視函式的時候就要變成「[『python』,『django』]」

from django.urls import path

from article import views

from django.urls import register_converter

# 定義自己的轉換器

class

categoryconverter

(object):

regex = r'\w+|(\w+\+\w+)+'

defto_python

(self,value)

: result = value.split(

"+")

return result

defto_url

(self,value):if

isinstance

(value,

list):

result =

"+".join(value)

return result

else

:raise runtimeerror(

"轉換url的時候,分類引數必須是列表"

)# 將轉換器進行註冊,使用函式register_converter()

register_converter(categoryconverter,

'cate'

)urlpatterns =

[ path(

"",views.article, name =

'article'),

# 其中\w表示的是,0-9,a-z,a-z,_等

# 使用re_path()函式,定義url

# re_path(r"^list/(?p\w+|(\w+\+\w+)+)/$",views.article_list),

path(

'list//'

,views.article_list,name =

'list'),

path(

'detail//'

,views.article_detail, name =

'detail'

)]

在瀏覽器中檢視執行結果:

4.以後在使用reverse()函式反轉的時候,限制傳遞「文章分類」的引數應該是乙個列表,並且要將這個列表變成「python+django」的形式。

def

article_list

(request,categories)

:print

("reverse函式反轉之前的categories:%s"

檢視執行結果:

其中自定義url轉換器的步驟為:

定義乙個類,直接繼承來自object就可以了。

在類中定義乙個屬性regex,這個屬性是用來限制url轉換器規則的正規表示式。

實現to_python(self,value)方法,這個方法是將url中的值轉換一下,然後傳給檢視函式的。

實現to_url(self,value)方法,這個方法是在做url反轉的時候,將傳遞進來的引數轉換後拼接成乙個正確的url。

將定義好的轉換器,使用「django.urls.converters.register_converter」方法註冊到django中。

021 自定義path(或url)轉換器

步驟一 步驟二 步驟三 第一步 第二步 第三步 第四步 總結一下 自定義 url 轉換器按照以下五個步驟來走就可以了 1.定義乙個類 2.在類中定義乙個屬性 regex 這個屬性是用來儲存 url 轉換器規則的正則表 3.實現 to python self,value 方法,這個方法是將 url 中...

自定義轉換器

1.匯入轉換器基類 在 flask 中,所有的路由的匹配規則都是使用轉換器物件進行記錄 2.自定義轉換器 自定義類繼承於轉換器基類 3.新增轉換器到預設的轉換器字典中 4.使用自定義轉換器實現自定義匹配規則 from flask import flask 1.匯入轉換器基類 在 flask 中,所有...

自定義轉換器

自定義轉換器 from werkzeug.routing import baseconverter 自定義正則轉換器 class regexconverter baseconverter def init self,url map,args super regexconverter,self ini...