Django4.0 URL調(diào)度器-注冊自定義的路徑轉(zhuǎn)換器

2022-03-16 17:42 更新

對于更復(fù)雜的匹配需求,你能定義你自己的路徑轉(zhuǎn)換器。

轉(zhuǎn)換器是一個類,包含如下內(nèi)容:

  • 字符串形式的 ?regex ?類屬性。
  • 一個?to_python(self, value)? 方法,用來處理匹配的字符串轉(zhuǎn)換為傳遞到函數(shù)的類型。如果沒有轉(zhuǎn)換為給定的值,它應(yīng)該會引發(fā) ?ValueError ?。?ValueError ?說明沒有匹配成功,因此除非另一個 URL 模式匹配成功,否則會向用戶發(fā)送404響應(yīng)。
  • 一個 ?to_url(self, value)? 方法,它將處理 Python 類型轉(zhuǎn)換為字符串以用于 URL 中。如果不能轉(zhuǎn)換給定的值,它應(yīng)該引發(fā) ?ValueError?。?ValueError ?被解釋為無匹配項,因此 ?reverse()? 將引發(fā) ?NoReverseMatch?,除非有其他 URL 模式匹配。

例如:

class FourDigitYearConverter:
    regex = '[0-9]{4}'

    def to_python(self, value):
        return int(value)

    def to_url(self, value):
        return '%04d' % value

在 ?URLconf ?中使用 ?register_converter()? 來注冊自定義的轉(zhuǎn)換器類:

from django.urls import path, register_converter

from . import converters, views

register_converter(converters.FourDigitYearConverter, 'yyyy')

urlpatterns = [
    path('articles/2003/', views.special_case_2003),
    path('articles/<yyyy:year>/', views.year_archive),
    ...
]


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號