實現乙個獲取文章列表的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...