《玩轉Django2.0》讀書筆記-編寫URL規則

              《玩轉Django2.0》讀書筆記-編寫URL規則html

                                       做者:尹正傑 python

版權聲明:原創做品,謝絕轉載!不然將追究法律責任。正則表達式

 

 

  URL(Uniform Resource Locator,統一資源定位符)是對能夠從互聯網上獲得對資源位置和訪問方法對一種簡介對錶示,是互聯網砂鍋標準資源的地址。互聯網上的每一個文件都有一個惟一的URL,用於指出文件的路徑爲孩子。簡單地說,URL就是常說的網址,每一個地址表明不一樣的網頁,在Django中,URL也稱爲URLconf。django

 

 

一.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規則以下:ide

#!/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/」,運行結果以下圖所示:ui

 

二.帶變量帶URLurl

   在平常開發過程當中,有時候一個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'), ]
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.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')
在views.py添加對應的視圖函數
<!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>
在index的App中的templates文件夾添加myyear.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') ]
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.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})
views.py添加的代碼
<!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>
index目錄templates的目錄下myyear_dict.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規則時,若是須要設置額外參數,設置規則以下:

  • 參數只能以字典的形式表示;
  • 設置的參數只能在視圖函數讀取和使用;
  • 字典的一個鍵值對錶明一個參數,鍵表明參數名,值表明參數值;
  • 參數值沒有數據格式限制,能夠爲某個對象,字符串或列表(元組)等。
相關文章
相關標籤/搜索