欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-06-05 17:27:07
...

在模板中使用路由

从网站开发的角度分析,网站代表路由,若想将项目定义的路由的路由显示在网页上,则要在模板上使用模板语法来生成路由地址。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会提示报错信息。

相关标签: Django2.2