• Django的模板系统(一)


    在项目迭代流程中,前端页面都会进行大量的修改,如果将页面放到视图函数中,那么当对前端页面修改的时候,也会使得视图函数发生变化,大大加重了后端的负担。从 MTV 设计模式的角度出发,视图层是实现业务逻辑的,在视图层编写代码和编写 HTML 页面是两项可以相互独立的工作。

    所以,这里需要了解Django的模板系统,它的存在使得 HTML 和 View 视图层实现了解耦
    请添加图片描述
    在 Django 中我们把 “模板” 称之为 Template,是设计模式中的 T 层,模板用于编写html代码,还可以嵌入模板代码转换更方便的完成页面开发,再通过在视图中渲染模板,将生成模板的设计实现了业务逻辑视图与显示内容模板的分离,一个视图可以使用任意一个模板,一个模板可以供多个视图使用。

    模板系统的配置

    其实 T 层应用是这样实现的,当创建好一个 Django 项目后,在项目的同级目录下(或在应用目录下)创建一个名为 templates 文件夹,对它进行简单的配置后,这个文件夹将被 Django 自动识别。

    执行命令python manage.py startapp sgin新增一个应用,在sgin目录下创建一个名为 templates 文件夹

    修改项目根目录下的settings.py文件,将sgin应用进行注册,并将sgin目录下templates 文件夹加入到模板引擎查询目录中。

    import os
    
    
    # Application definition
    
    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'demo',     
        'sgin',		# 添加应用
    ]
    
    
    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [os.path.join(BASE_DIR,'sgin/templates')],		# 将sgin目录下templates 文件夹加入到模板引擎查询目录中
            'APP_DIRS': True,
            'OPTIONS': {
                'context_processors': [
                    'django.template.context_processors.debug',
                    'django.template.context_processors.request',
                    'django.contrib.auth.context_processors.auth',
                    'django.contrib.messages.context_processors.messages',
                ],
            },
        },
    ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    TEMPLATES 变量内容解析:

    • BACKEND : Django默认设置,指定了要是用的模板引擎的 Python 路径;
    • DIRS : 一个目录列表,指定模板文件的存放路径,可以是一个或者多个。模板引擎将按照列表中定义的顺序查找模板文件;
    • APP_DIRS : 一个布尔值,默认为 Ture,表示会在安装应用中的 templates 目录中搜索所有模板文件;当值为 Ture时,可不用在DIRS参数中添加在应用中的templstes文件夹
    • OPTIONS : 指定额外的选项,不同的模板引擎有着不同的可选参数。

    一般情况下,是直接在项目根目录下创建templstes文件夹,设置 TEMPLATES 的 DIRS 值则为

    'DIRS': [os.path.join(BASE_DIR,'templates')],
    
    • 1

    模板的加载与响应方式

    在 在sgin目录下的 templates 文件夹中新建一个 HTML 文件,并且将此文件命名为 events.html,然后在此文件中编写 HTML 代码

    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>测试title>
    head>
    <body>
    <h1 style="color: blue">测试分类h1>
    <h3>{{ event_list }}h3>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    模板传参:

    {{ event_list }}

    中使用{{}}括起来的内容是一个模板的变量,其中event_list是变量名,用于接收视图函数中传递的数据

    sgin目录下的views.py文件中编写视图函数

    from django.shortcuts import render
    
    # Create your views here.
    
    def event(request):
        eventlist = [
            '功能测试',
            '性能测试',
            '自动化测试'
        ]
        return render(request,'events.html',{'event_list':eventlist})
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    **render方法:**render 是 View 层加载模板的一种方式,它封装在 django.shortcuts 模块中,它的作用是结合一个给定的模板和一个给定的字典,并返回一个渲染后的 HttpResponse 对象。通俗的讲就是把字典格式的内容, 加载进 templates 目录中定义的 HTML 文件, 最终通过浏览器渲染呈现。

    render(request, template_name, context=None, content_type=None, status=None, using=None)
    
    • 1

    render方法参数解析:

    • request: 是一个固定参数,用于生成响应的请求对象;
    • template_name: templates 中定义的文件, 要注意路径名. 比如html文件所在路径为 templates\home\index.html, 参数就要写home\index.html
    • context: 要传入文件中用于渲染呈现的数据, 默认是字典格式;内容为{'模板变量':视图函数变量}
    • content_type: 生成的文档要使用的媒体格式类型。默认为 DEFAULT_CONTENT_TYPE 设置的值;
    • status: http 的响应代码,默认是 200;
    • using: 用于加载模板使用的模板引擎的名称。

    request、template_name、context为必传参数

    最后在项目目录下urls.py 文件的 urlpatterns 列表中为event视图函数配置路由映射关系

    from django.contrib import admin
    from django.urls import path
    from demo import views  as demo_view   
    from sgin import views as sgin_view		# 导入sgin应用中的视图
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('index/',demo_view.index),      
        path('events/',sgin_view.event),	# 将视图函数添加入路由配置中
    ]
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    执行 python manage,py runserver 命令启动项目,在浏览器中输入URL:http://127.0.0.1:8000/events/,视图函数中eventlist变量的内容,就通过模板的加载与响应展示到浏览器中了

  • 相关阅读:
    Vmware快捷键_Ctrl+Alt_从虚拟机状态 退回 本地状态_获取鼠标
    WinForm TextBox默认中英文输入法设置
    k8s-helloword部署一个应用
    深度学习分析NASA电池数据(1 数据读取)
    Java内存泄露与内存溢出详解(InsCode AI 创作助手)
    深入了解 JavaScript 语法错误以及如何防止它们
    C++的动态分派在HotSpot VM中的重要应用
    华为防火墙基础自学系列 | IKE介绍
    数据同步、
    四、Docker镜像与仓库(一)
  • 原文地址:https://blog.csdn.net/qq_44614026/article/details/126326433