中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Django的路由系統的分類和URLconf的配置

發布時間:2021-09-10 11:12:14 來源:億速云 閱讀:201 作者:chen 欄目:大數據

這篇文章主要講解了“Django的路由系統的分類和URLconf的配置”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Django的路由系統的分類和URLconf的配置”吧!

靜態路由和動態路由

靜態路由:已經明確定義好的一條路由,比如下例,用戶只能在瀏覽器上輸入/articles/2003/ 才能匹配到這條路由,輸入任何其它的都匹配不上本條。

urlpatterns = [
    path('articles/2003/', views.special_case_2003),
]

動態路由:定義的只是路由規則,比如只能輸入數字、或特定排列、長度的字符等,你不知道用戶會具體輸入什么,只要符合你的規則即可。

URLconf配置

Django2.0 基本格式

from django.urls import path
from . import views

urlpatterns = [
    path('articles/2003/', views.special_case_2003),
    path('articles/<int:year>/', views.year_archive),
    path('articles/<int:year>/<int:month>/', views.month_archive),
    path('articles/<int:year>/<int:month>/<slug:slug>/', views.article_detail),
]

以下路由對應的views.py視圖如下:

def special_case_2003(request):
    return HttpResponse("dddd")

def year_archive(request,year):
    return HttpResponse("year_archive" + str(year))

def month_archive(request,year,month):
    return HttpResponse("month_archive %s-%s" %(year,month))

def article_detail(request,year,month,slug):
    return HttpResponse("article_detail %s-%s %s" %(year,month,slug))

說明:

  • 要從URL捕獲一個變量,需要使用尖括號(<>)

  • 需要捕獲的變量能夠可選擇地包含一個轉換類型。例如:使用<int:name>捕獲一個整數參數。如果沒有轉換器,則匹配任何不包含(/)的字符

  • 沒有必須在URL前面加斜線/。例如:articles而非/articles

請求示例:

  • /articles/2005/03/請求會匹配第三條規則

  • /articles/2003/請求會匹配第一條規則而不是第二條

  • /articles/2003請求不會匹配任何規則,因為這個URL沒有以斜線/結尾

  • /articles/2003/03/building-a-django-site/會匹配最后一條規則

默認的Path converters:

  • str:匹配任何非空字符串,不包含路徑分隔符/

  • int:匹配任何整數

  • slug:匹配任何字母、數字、下劃線(_)和連接線(-)。例如:building-your-1st-django-site

  • uuid:匹配UUID字符串。例如:075194d3-6885-417e-a8a8-6c931e272f00

  • path:匹配任何非空字符串,包含路徑分隔符/

自定義Path Converter

自定義Path Converter必須包含以下要素:

- 一個名為`regex`的類屬性
- 一個 `to_python(self, value)`方法。該方法表示將匹配的字符串轉換為應該傳遞給視圖函數的類型
- 一個`to_url(self, value)`方法。該方法處理將Python類型轉換為要在URL中使用的字符串
class FourDigitYearConverter:
    regex = '[0-9]{4}'

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

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

使用時需使用register_converter()將自定義Converter注冊進Django中:

from django.urls import register_converter, path
 
from . import converters, views
 
register_converter(converters.FourDigitYearConverter, 'yyyy')
 
urlpatterns = [
    path('articles/2003/', views.special_case_2003),
    path('articles/<yyyy:year>/', views.year_archive),
    ...
]

include 子url

當有多個app時,每個app可以有自己的urls.py, 只需在頂級urls.py中include一下就可以

from django.urls import include, path

urlpatterns = [
    # ... snip ...
    path('community/', include('aggregator.urls')),
    path('contact/', include('contact.urls')),
    # ... snip ...
]

django 在匹配url時,只要遇到include()語法, 就會把url分成2部分,比如上面代碼里的url, 只要匹配上community/,就會把整條url丟給include('aggregator.urls')子urls.py。 子urls.py負責匹配后面的部分。

減少重復的url

如果url 中出向很多重復的部分,可以按下面的方法聚合

from django.urls import include, path

from apps.main import views as main_views
from credit import views as credit_views

extra_patterns = [
    path('reports/', credit_views.report),
    path('reports/<int:id>/', credit_views.report),
    path('charge/', credit_views.charge),
]

urlpatterns = [
    path('', main_views.homepage),
    path('help/', include('apps.help.urls')),
    path('credit/', include(extra_patterns)),
]

在此例子中,/credit/reports/請求將會被credit_views.report()方法處理

傳遞額外參數給views

from django.urls import path
from . import views
 
urlpatterns = [
    path('blog/<int:year>/', views.year_archive, {'foo': 'bar'}),
]

在這個例子中,對于/blog/2005/請求,Django 將調用views.year_archive(request, year='2005', foo='bar')

感謝各位的閱讀,以上就是“Django的路由系統的分類和URLconf的配置”的內容了,經過本文的學習后,相信大家對Django的路由系統的分類和URLconf的配置這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

仁怀市| 滕州市| 高清| 沈丘县| 德兴市| 内乡县| 张掖市| 怀集县| 买车| 天长市| 江北区| 隆尧县| 凭祥市| 涿鹿县| 安陆市| 边坝县| 包头市| 霞浦县| 连州市| 宾川县| 临高县| 大洼县| 保定市| 红原县| 渝中区| 汤阴县| 连城县| 昭苏县| 松滋市| 屏东市| 娄底市| 泽州县| 白玉县| 南靖县| 察雅县| 漠河县| 岐山县| 汤原县| 西宁市| 铜山县| 郯城县|