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会提示报错信息。
上一篇: 将maven源改为国内阿里云镜像
下一篇: C语言中的变量和常量的区别和使用