django開發系列 自定義URL轉換器

2021-09-29 15:37:23 字數 1593 閱讀 8533

實現乙個獲取文章列表的demo,使用者可以根據/articles/文章分類/的方式來獲取文章。其中文章分類採用的是分類1+分類2+分類3...的方式拼接的,並且如果只有乙個分類,那就不需要加號。示例如下:

/articles/python/

/articles/python+django/

/articles/python+django+flask/

以此類推...

在「文章分類」引數傳到檢視函式之前要把這些分類分開來儲存到列表中。

比如引數是python+django,那麼傳到檢視函式的時候就要變成['python','django']

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

之前已經學到過一些django內建的url轉換器,包括有int、uuid等。有時候這些內建的url轉換器並不能滿足我們的需求,因此django給我們提供了乙個介面可以讓我們自己定義自己的url轉換器。

自定義url轉換器按照以下五個步驟來走就可以了:

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

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

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

實現to_url(self,value)方法,這個方法是在做url反轉的時候,將傳進來的引數轉換後拼接成乙個正確的url。 5. 將定義好的轉換器,使用django.urls.converters.register_converter方法註冊到django中。

示例**如下:

from django.urls import register_converter

class

categoryconverter

(object):

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

defto_python

(self,value)

:# python+django+flask

# ['python','django','flask']

result = value.split(

"+")

return result

defto_url

(self,value)

:# value:['python','django','flask']

# python+django+flask

ifisinstance

(value,

list):

result =

"+".join(value)

return result

else

:raise runtimeerror(

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

)register_converter(categoryconverter,

'cate'

)

django開發系列 自定義過濾器

在這個templatetags包下面,建立乙個python檔案用來儲存過濾器。在新建的python檔案中,定義過濾器 也就是函式 這個函式的第乙個引數永遠是被過濾的那個值,並且如果在使用過濾器的時候傳遞引數,那麼還可以定義另外乙個引數。但是過濾器最多只能有2個引數。在寫完過濾器 函式 後,要使用dj...

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...