Django2.X—在模板中使用路由

在模板中使用路由

從網站開發的角度分析,網站代表路由,若想將項目定義的路由的路由顯示在網頁上,則要在模板上使用模板語法來生成路由地址。Django內置了一套模板語法,它能將Python的語法轉換成HTML語言,然後通過瀏覽器解析HTML語言並生成相應的網頁內容。
項目環境搭建後,在MyDjango文件夾的urls.py中使用urls.py中使用路由函數path和include定義項目應用文件夾index的路由,代碼如下:

from django.contrib import admin
from django.urls import path,include
urlpatterns = [
    # 指向內置Admin後臺系統的路由文件sites.py
    path('admin/',admin.site.urls),
    # 指向index的路由文件urls.py
    path('',include('index.urls'))
]

在項目應用的index裏,分別在urls.py和view.py文件中定義路由和視圖函數,並且在模板文件夾templates的index.html文件中編寫模板內容,代碼如下:

# index的urls.py
from django.urls import re_path,path
from . import views
urlpatterns = [
    # 添加帶有字符類型、整型和slug的路由
    re_path('(?P<year>[0-9]{4})/(?P<month>[0-9]{2}/(?P<day>[0-9]{2})).html',views.mydate,name = 'mydate'),
    # 定義首頁的路由
    path('',views.index)
]

# templates的index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Hello World!</title>
</head>
<body>
    <span>Hello World!</span>
    <br>
    <a href="{% url 'mydate' '2020' '04' '10' %}">查看日期</a>
</body>
</html>

現分析index.html的模板內容,模板使用了Django內置的模塊語法url來生成路由地址,模板語法url設有4個不同的參數,其說明如下:

  • mydate: 代表命名mydate的路由。.
  • 2020: 代表路由地址變量year。
  • 04: 代表路由地址變量month。
  • 10: 代表路由地址變量day。
    注: 變量之間使用空格隔開。

模板語法的參數設置與路由定義是相互關聯的,具體說明如下:

  • 若路由地址存在變量,則模板語法url需要設置相應的參數值,參數值之間使用空間隔開。
  • 若路由地址不存在變量,則模板語法url只需設置路由命名name即可,無需設置額外參數。
  • 若路由地址的變量與模板語法url的參數數量不相同,則在瀏覽器訪問網頁的時候會提示NoReverseMatch at的錯誤信息。

上述例子中,MyDjango文件夾的urls.py在使用函數include定義路由時並沒有設置命名空間namespace。若設置了命名空間namespace,則模板裏使用路由的方式有所變化。下面對MyDjango文件夾urls.py和模板文件夾templates的index.html代碼進行修改:

# MyDjango文件夾的urls.py
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
    # 指向內置Admin後臺系統的路由文件sites.py
    path('admin/',admin.site.urls),
    # 指向index的路由文件urls.py
    # path('',include('index.urls'))
    # 使用命名空間namespace
    path('',include(('index.urls','index'),namespace='index')),
]

# templates的index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Hello World!</title>
</head>
<body>
    <span>Hello World!</span>
    <br>
    {# <a href="{% url 'mydate' '2020' '04' '10' %}">查看日期</a>#}
    <a href="{% url 'index:mydate' '2020' '04' '10' %}">查看日期</a>
    
</body>
</html>

從模板文件index.html可以看出,若項目應用設有命名空間namespace,則模板語法url在使用路由,需要在命名路由name前面添加命名空間namespace並且使用冒號隔開,如:”namespace:name“。若路由在定義過程中使用命名空間namespace,而模板語法url沒有添加命名空間namespace,則在訪問網頁時,Django會提示報錯信息。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章