《玩轉Django2.0》讀書筆記-編寫URL規則
作者:尹正傑
版權聲明:原創作品,謝絕轉載!否則將追究法律責任。
URL(Uniform Resource Locator,統一資源定位符)是對可以從互聯網上得到對資源位置和訪問方法對一種簡介對表示,是互聯網砂鍋標准資源的地址。互聯網上的每個文件都有一個唯一的URL,用於指出文件的路徑為孩子。簡單地說,URL就是常說的網址,每個地址代表不同的網頁,在Django中,URL也稱為URLconf。
一.URL編寫規則
如下圖所示,在講解URL編寫規則之前,需對MyWeb項目的目錄進行調整,使其更符合開發規范性。在每個App中設置獨立的靜態資源和模板文件並添加一個空白的內容的.py文件,命名為urls.py。
在App里添加urls.py是將App的URL都寫入該文件中,而項目根目錄的urls.py是將每個App的urls.py統一管理。
當程序收到用戶請求的時候,首先在根目錄的urls.py查找該URL是屬於哪個App,然后再從App的urls.py找到具體的URL信息。在根目錄的urls.py編寫URL規則如下:
#!/usr/bin/env python3 #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.com from django.contrib import admin #導入Admin功能模塊 from django.urls import path,include #導入URL編寫模塊 ''' urlpatterns: 整個項目的URL集合,每個元素代表一條URL信息。 path('admin/', admin.site.urls): 設定Admin的URL。'admin/'代表“http://127.0.0.1:8000/admin”地址信息,'admin'后面的斜杠是路徑分隔符; “admin.site.urls”是URL的處理函數,也稱為視圖函數。 path('',include('index.urls')): URL為空,代表為網站的域名,即“http://127.0.0.1:8000/”,通常是網站的首頁;include是將該URL分發給index的urls.py處理。 ''' urlpatterns = [ path('admin/', admin.site.urls), path('',include('index.urls')) ]
由於首頁的地址分發給index.urls.py處理,因此下一步需要對index的urls.py編寫URL信息,代碼如下:
#!/usr/bin/env python3 #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.com from django.urls import path #導入URL編寫模塊 from . import views #導入當前目錄(該文件存放的同一目錄)下的views.py文件 ''' urlpatterns: 整個項目的URL集合,每個元素代表一條URL信息。 path('', views.index): URL為空,代表為網站的域名,即“http://127.0.0.1:8000/”,通常是網站的首頁;還寄給上面我們導入了“views”這個文件嗎? 該文件用於編寫視圖函數,處理URL請求信息並返回網頁給用戶。“views.index”表示我們調用了views文件中的index函數(換句話說,當 用戶訪問首頁是,就會觸發“views.index”函數的執行)。因此我們在這里指定后,需要在“views”這個文件里編寫對應的“index”函數。 ''' urlpatterns = [ path('', views.index), ]
index的urls.py編寫規則與根目錄的urls.py大致相同,基本上所有的URL都是有固定編寫格式的。上述代碼倒入了同一目錄喜愛的views.py文件,該文件用於編寫視圖函數,處理URL請求信息並返回網頁內容給用戶。因此,在views.py中編寫index函數的處理過程,代碼如下:
#!/usr/bin/env python3 #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.com from django.http import HttpResponse #用於給用戶響應信息。 ''' index函數必須設置參數request,該參數代表當前用戶的請求對象,該對象包含用戶名,請求內容和請求方式等信息,視圖函數 執行完成后必須使用return將處理結果返回,否則程序會拋出異常信息。 ''' def index(request): return HttpResponse("尹正傑到此一游!")
啟動MyWeb項目,在瀏覽器中打開“http://127.0.0.1:8000/”,運行結果如下圖所示:
二.帶變量帶URL
在日常開發過程中,有時候一個URL可以代表多個不同的頁面,如編寫帶有日期的URL,若根據前面的編寫方式,按一年計算,則需要開發者編寫365個不同的URL才能實現,這種做法明顯是不可取的。因此,Django在編寫的是URL時,可以對URL設置變量值,使URL具有多樣性。
URL的變量類型有字符類型,整型,slug和uuid,最為常用的是字符類型和整型。各個類型說明如下:
字符類型(str): 匹配任何非空字符串,但不含斜杠,感嘆號之類的特殊字符。如果沒有指定類型,默認使用該類型。 整型(int): 匹配0和正整數。 slug: 可理解為注釋,后綴或附屬等概念,常作為URL的解釋性字符。可匹配任何ASCII字符以及鏈接符和下划線,能使URL更加清晰易懂。比如網頁的標題的是“尹正傑博客”,其URL可以設置為“yin-zheng-jie-blog”。 uuid: 匹配一個uuid格式的對象。為了防止沖突,規定必須使用破折號並且所有字母必須都小寫,例如:6456853c-92d3-4465-a7be-83bdf4ce999
根據上述變量類型,在index的urls.py里添加帶有字符類型,整型和slug的URL地址信息,代碼如下:
#!/usr/bin/env python3 #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.com from django.urls import path #導入URL編寫模塊 from . import views #導入當前目錄(該文件存放的同一目錄)下的views.py文件 ''' urlpatterns: 整個項目的URL集合,每個元素代表一條URL信息。 path('', views.index): URL為空,代表為網站的域名,即“http://127.0.0.1:8000/”,通常是網站的首頁;還寄給上面我們導入了“views”這個文件嗎? 該文件用於編寫視圖函數,處理URL請求信息並返回網頁給用戶。“views.index”表示我們調用了views文件中的index函數(換句話說,當 用戶訪問首頁是,就會觸發“views.index”函數的執行)。因此我們在這里指定后,需要在“views”這個文件里編寫對應的“index”函數。 path('<year>!<int:month>!<slug:day>',views.madate): 在URL中使用變量符合“<>”可以為URL設置變量。在括號里面以冒號划分為兩部分,前面代表的是變量的數據類型,后面代表的是變量 名,變量名可自行命名。上述代碼對新政的URL設置了三個變量值,分別是<year>,<int:month>和<slug:day>,變量說明如下: <slug:day>: 變量名稱為year,數據格式為字符類型,與<str:year>的含義一樣。 <int:month>: 變量名稱為month,數據格式為整型。 <slug:day>: 變量名為day,數據類型為slug 溫馨提示:上面中的各個變量之間使用“!”對各個變量進行分隔。當然你也可以設置為“/”進行分隔,不推薦使用"#",因為在URL中他有特定的含義。 ''' urlpatterns = [ path('', views.index), path('<year>!<int:month>!<slug:day>',views.madate) ]
然后在views.py中編寫視圖函數mydate的處理方法,代碼如下:
#!/usr/bin/env python3 #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.com from django.http import HttpResponse #用於給用戶響應信息。 ''' index函數必須設置參數request,該參數代表當前用戶的請求對象,該對象包含用戶名,請求內容和請求方式等信息,視圖函數 執行完成后必須使用return將處理結果返回,否則程序會拋出異常信息。 ''' def index(request): return HttpResponse("尹正傑到此一游!") ''' 試圖函數的mydate有4個函數參數,其中year,month,和day是來自與URL的變量。URL的變量和視圖的函數的參數與URL的變量。 URL的變量和視圖函數的參數要一一對應,如果視圖函數的參數與URL的變量對應不上,那么程序會拋出參數不相符的報錯信息。 ''' def madate(request,year,month,day): return HttpResponse(str(year) + "-" + str(month) + "-" +str(day))
啟動項目,在瀏覽器上輸入:“http://127.0.0.1:8000/2008!10!11”,運行結果如下圖所示:
在上述例子中,URL的變量分別代表年,月,日。從變量的數據類型可以看出,變量值只要符合數據格式都是合法的,使得某些變量值不符合日期格式要求。為了進一步規范日期格式,可以使用正則表達式限制URL可變范圍。正則表達式的URL編寫如下:
#!/usr/bin/env python3 #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.com from django.urls import path,re_path #導入URL編寫模塊,path只是普通的URL定義,而re_path則支持正則表達式 from . import views #導入當前目錄(該文件存放的同一目錄)下的views.py文件 ''' urlpatterns: 整個項目的URL集合,每個元素代表一條URL信息。 path('', views.index): URL為空,代表為網站的域名,即“http://127.0.0.1:8000/”,通常是網站的首頁;還寄給上面我們導入了“views”這個文件嗎? 該文件用於編寫視圖函數,處理URL請求信息並返回網頁給用戶。“views.index”表示我們調用了views文件中的index函數(換句話說,當 用戶訪問首頁是,就會觸發“views.index”函數的執行)。因此我們在這里指定后,需要在“views”這個文件里編寫對應的“index”函數。 path('<year>!<int:month>!<slug:day>',views.madate): 在URL中使用變量符合“<>”可以為URL設置變量。在括號里面以冒號划分為兩部分,前面代表的是變量的數據類型,后面代表的是變量 名,變量名可自行命名。上述代碼對新政的URL設置了三個變量值,分別是<year>,<int:month>和<slug:day>,變量說明如下: <slug:day>: 變量名稱為year,數據格式為字符類型,與<str:year>的含義一樣。 <int:month>: 變量名稱為month,數據格式為整型。 <slug:day>: 變量名為day,數據類型為slug 溫馨提示:上面中的各個變量之間使用“!”對各個變量進行分隔。當然你也可以設置為“/”進行分隔,不推薦使用"#",因為在URL中他有特定的含義。 re_path('(?P<year>[0-9]{4}/?P<month>[0-9]{2}/?P<day>[0-9]{2}).html',views.madate): 在URL中引用正則表達式,首先導入re_path功能模塊,正則表達式的作用是對URL的變量進行截取與判斷,以小括號表示,每個小括號 的前后可以使用斜杠或者其他字符將其分隔。以下代碼為例,分別將year,month和day以斜杠分隔,每個變量以一個小括號為單位,在小括 號內,可分為三部分,以(?P<year>[0-9]{4})為例進行介紹。 ?P: 是固定格式。 <year>: 是變量的編寫規則 [0-9]{4}: 是正則表達式的匹配模式,代表變量的長度是4,只允許取0-9的值。 值得注意的是,如果URL的末端使用正則表達式,那么在該URL的末端應加上斜杠或者其他字符,否則正則表達式無法生效。以下代碼 為例的變量day,若在末端沒有設置“.html”,則在瀏覽器上輸入無限長的字符串,程序也能正常訪問。 ''' urlpatterns = [ path('', views.index), #path('<year>!<int:month>!<slug:day>',views.madate) # re_path('(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2}).html',views.madate), re_path('(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2}).html', views.madate), ]
三.設置參數name
除了在URL里面設置變量之外,Django還可以對URL進行命名。在index對url.py,views.py和模板myyear.html中添加如下代碼:

#!/usr/bin/env python3 #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.com from django.urls import path,re_path #導入URL編寫模塊,path只是普通的URL定義,而re_path則支持正則表達式 from . import views #導入當前目錄(該文件存放的同一目錄)下的views.py文件 ''' urlpatterns: 整個項目的URL集合,每個元素代表一條URL信息。 path('', views.index): URL為空,代表為網站的域名,即“http://127.0.0.1:8000/”,通常是網站的首頁;還寄給上面我們導入了“views”這個文件嗎? 該文件用於編寫視圖函數,處理URL請求信息並返回網頁給用戶。“views.index”表示我們調用了views文件中的index函數(換句話說,當 用戶訪問首頁是,就會觸發“views.index”函數的執行)。因此我們在這里指定后,需要在“views”這個文件里編寫對應的“index”函數。 path('<year>!<int:month>!<slug:day>',views.madate): 在URL中使用變量符合“<>”可以為URL設置變量。在括號里面以冒號划分為兩部分,前面代表的是變量的數據類型,后面代表的是變量 名,變量名可自行命名。上述代碼對新政的URL設置了三個變量值,分別是<year>,<int:month>和<slug:day>,變量說明如下: <slug:day>: 變量名稱為year,數據格式為字符類型,與<str:year>的含義一樣。 <int:month>: 變量名稱為month,數據格式為整型。 <slug:day>: 變量名為day,數據類型為slug 溫馨提示:上面中的各個變量之間使用“!”對各個變量進行分隔。當然你也可以設置為“/”進行分隔,不推薦使用"#",因為在URL中他有特定的含義。 re_path('(?P<year>[0-9]{4}/?P<month>[0-9]{2}/?P<day>[0-9]{2}).html',views.madate): 在URL中引用正則表達式,首先導入re_path功能模塊,正則表達式的作用是對URL的變量進行截取與判斷,以小括號表示,每個小括號 的前后可以使用斜杠或者其他字符將其分隔。以下代碼為例,分別將year,month和day以斜杠分隔,每個變量以一個小括號為單位,在小括 號內,可分為三部分,以(?P<year>[0-9]{4})為例進行介紹。 ?P: 是固定格式。 <year>: 是變量的編寫規則 [0-9]{4}: 是正則表達式的匹配模式,代表變量的長度是4,只允許取0-9的值。 值得注意的是,如果URL的末端使用正則表達式,那么在該URL的末端應加上斜杠或者其他字符,否則正則表達式無法生效。以下代碼 為例的變量day,若在末端沒有設置“.html”,則在瀏覽器上輸入無限長的字符串,程序也能正常訪問。 ''' urlpatterns = [ path('', views.index), #path('<year>!<int:month>!<slug:day>',views.madate) # re_path('(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2}).html',views.madate), re_path('(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2}).html', views.madate), # 帶參數name的URL re_path('(?P<year>[0-9]{4}).html', views.mayear, name='mayear'), ]

#!/usr/bin/env python3 #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.com from django.http import HttpResponse #用於給用戶響應信息。 from django.shortcuts import render #用於網頁渲染的模塊 ''' index函數必須設置參數request,該參數代表當前用戶的請求對象,該對象包含用戶名,請求內容和請求方式等信息,視圖函數 執行完成后必須使用return將處理結果返回,否則程序會拋出異常信息。 ''' def index(request): return HttpResponse("尹正傑到此一游!") ''' 試圖函數的mydate有4個函數參數,其中year,month,和day是來自與URL的變量。URL的變量和視圖的函數的參數與URL的變量。 URL的變量和視圖函數的參數要一一對應,如果視圖函數的參數與URL的變量對應不上,那么程序會拋出參數不相符的報錯信息。 ''' def madate(request,year,month,day): return HttpResponse(str(year) + "-" + str(month) + "-" +str(day)) # 參數name的URL的視圖函數 def mayear(request, year): return render(request, 'myyear.html')

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {# 在以往,大多數開發者都是采用這種方式在木板上設置每個標簽的a的href的屬性值,如果URL地址發生變更,就要修改每個標簽a的href屬性值,這種方式不利於URL的變更和維護。#} <div><a href="/2018.html">2018 old Archive</a></div> {# 和上面不同的,我們采用Django的模板語法,我們在URL中設置參數name,只要參數name的值不變,無論URL地址信息如何修改都無須修改模板中標簽a的href屬性值。#} <div><a href="{% url 'mayear' 2018 %}">2018 Archive</a></div> </body> </html>
上述代碼分別從URL,視圖函數和HTML模版來說明參數name的具體作用,整個執行流程如下:
1>.當用戶訪問URL時,項目根據URL信息選擇視圖函數mayear,並將該URL命名為mayear。
2>.視圖函數mayear將模板myyear.html作為響應內容並生成相應的網頁返回給用戶
3>.在模板myyear.html中分別設置兩個標簽a,雖然兩個標簽a的href屬性只的寫法有所不同,但實質上兩者都指向命名為mayear的URL地址信息。
4>.第二個標簽a的href為"{% url 'mayear' 2018 %}",這里是Django 的模板語法,模板語法以{%%}表示。其中,url 'mayear' 是將命名為“mayear”的URL地址信息作為href屬性值;2018是該URL的變量year,若URL沒有設置變量值,則無需添加。
從上述例子可以看到,模板中的mayear與urls.py所設置的參數name是一一對應的。參數name的作用是對該URL地址信息進行命名,然后在HTML模板中使用可以生成相應的URL信息。在瀏覽器的地址欄輸入:“http://127.0.0.1:8000/2018.html”,運行結果如下圖所示:
四.設置額外參數
除了參數name之外,還有一種參數類型是以字典的數據類型傳遞的,該參數沒有具體命名,只要是字典像是即可,而且該參數只能在有視圖函數中讀取和使用,其代碼如下:(Django還可以對URL進行命名。在index對url.py,views.py和模板myyear.html中添加如下代碼:)

#!/usr/bin/env python3 #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.com from django.urls import path,re_path #導入URL編寫模塊,path只是普通的URL定義,而re_path則支持正則表達式 from . import views #導入當前目錄(該文件存放的同一目錄)下的views.py文件 ''' urlpatterns: 整個項目的URL集合,每個元素代表一條URL信息。 path('', views.index): URL為空,代表為網站的域名,即“http://127.0.0.1:8000/”,通常是網站的首頁;還寄給上面我們導入了“views”這個文件嗎? 該文件用於編寫視圖函數,處理URL請求信息並返回網頁給用戶。“views.index”表示我們調用了views文件中的index函數(換句話說,當 用戶訪問首頁是,就會觸發“views.index”函數的執行)。因此我們在這里指定后,需要在“views”這個文件里編寫對應的“index”函數。 path('<year>!<int:month>!<slug:day>',views.madate): 在URL中使用變量符合“<>”可以為URL設置變量。在括號里面以冒號划分為兩部分,前面代表的是變量的數據類型,后面代表的是變量 名,變量名可自行命名。上述代碼對新政的URL設置了三個變量值,分別是<year>,<int:month>和<slug:day>,變量說明如下: <slug:day>: 變量名稱為year,數據格式為字符類型,與<str:year>的含義一樣。 <int:month>: 變量名稱為month,數據格式為整型。 <slug:day>: 變量名為day,數據類型為slug 溫馨提示:上面中的各個變量之間使用“!”對各個變量進行分隔。當然你也可以設置為“/”進行分隔,不推薦使用"#",因為在URL中他有特定的含義。 re_path('(?P<year>[0-9]{4}/?P<month>[0-9]{2}/?P<day>[0-9]{2}).html',views.madate): 在URL中引用正則表達式,首先導入re_path功能模塊,正則表達式的作用是對URL的變量進行截取與判斷,以小括號表示,每個小括號 的前后可以使用斜杠或者其他字符將其分隔。以下代碼為例,分別將year,month和day以斜杠分隔,每個變量以一個小括號為單位,在小括 號內,可分為三部分,以(?P<year>[0-9]{4})為例進行介紹。 ?P: 是固定格式。 <year>: 是變量的編寫規則 [0-9]{4}: 是正則表達式的匹配模式,代表變量的長度是4,只允許取0-9的值。 值得注意的是,如果URL的末端使用正則表達式,那么在該URL的末端應加上斜杠或者其他字符,否則正則表達式無法生效。以下代碼 為例的變量day,若在末端沒有設置“.html”,則在瀏覽器上輸入無限長的字符串,程序也能正常訪問。 ''' urlpatterns = [ path('', views.index), #path('<year>!<int:month>!<slug:day>',views.madate) # re_path('(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2}).html',views.madate), re_path('(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2}).html', views.madate), # 帶參數name的URL re_path('(?P<year>[0-9]{4}).html', views.mayear, name='mayear'), # 參數為字典的URL re_path('dict/(?P<year>[0-9]{4}).htm', views.myyear_dict, {'month': '05'}, name='myyear_dict') ]

#!/usr/bin/env python3 #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.com from django.http import HttpResponse #用於給用戶響應信息。 from django.shortcuts import render #用於網頁渲染的模塊 ''' index函數必須設置參數request,該參數代表當前用戶的請求對象,該對象包含用戶名,請求內容和請求方式等信息,視圖函數 執行完成后必須使用return將處理結果返回,否則程序會拋出異常信息。 ''' def index(request): return HttpResponse("尹正傑到此一游!") ''' 試圖函數的mydate有4個函數參數,其中year,month,和day是來自與URL的變量。URL的變量和視圖的函數的參數與URL的變量。 URL的變量和視圖函數的參數要一一對應,如果視圖函數的參數與URL的變量對應不上,那么程序會拋出參數不相符的報錯信息。 ''' def madate(request,year,month,day): return HttpResponse(str(year) + "-" + str(month) + "-" +str(day)) # 參數name的URL的視圖函數 def mayear(request, year): return render(request, 'myyear.html') # 參數為字典的URL的視圖函數 def myyear_dict(request, year, month): return render(request, 'myyear_dict.html',{'month':month})

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <a href="{% url 'myyear_dict' 2018 %}">2018 {{ month }} Archive</a> </body> </html>
上述代碼分別從URL,視圖函數和HTML模板來說明URL額外參數的具體作用,說明如下 :
除了在URL地址信息中設置擦數name之外,還加入了參數{'month':'05'},該參數用於設置參數month,參數值為05.
然后視圖函數myyear_dict獲取了變量year和參數month,前者設置在URL地址中,而后者在URL地址外。
最后視圖函數將參數month的值傳遞到HTML模板並生成HTML網頁返回給用戶。在瀏覽器端輸入:“http://127.0.0.1:8000/dict/2018.htm”,運行結果如下:
在編寫URL規則時,如果需要設置額外參數,設置規則如下:
- 參數只能以字典的形式表示;
- 設置的參數只能在視圖函數讀取和使用;
- 字典的一個鍵值對代表一個參數,鍵代表參數名,值代表參數值;
- 參數值沒有數據格式限制,可以為某個對象,字符串或列表(元組)等。