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


              《玩轉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'),
]
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規則時,如果需要設置額外參數,設置規則如下:

  • 參數只能以字典的形式表示;
  • 設置的參數只能在視圖函數讀取和使用;
  • 字典的一個鍵值對代表一個參數,鍵代表參數名,值代表參數值;
  • 參數值沒有數據格式限制,可以為某個對象,字符串或列表(元組)等。

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM