Django配置模板引擎

news2024/9/19 18:47:04

【图书介绍】《Django 5企业级Web应用开发实战(视频教学版)》_django 5企业级web应用开发实战(视频教学版)-CSDN博客

《Django 5企业级Web应用开发实战(视频教学版)》(王金柱)【摘要 书评 试读】- 京东图书 (jd.com)

本节主要介绍Django框架模板层中关于配置方面的内容,包括添加模板引擎支持、模板引擎用法、内置后端和自定义后端等方面。配置模板引擎是基于Django框架进行模板层开发的基础。

5.2.1  添加模板引擎支持

Django框架的模板引擎设置是使用TEMPLATES选项进行配置的。TEMPLATES选项是一个配置列表,每个模板引擎都需配置一个。在通过startproject命令创建的项目目录中,会自动生成一个名称为“settings.py”的设置文件,里面为设计人员默认配置好了一个TEMPLATES选项。

TEMPLATES选项的配置代码如下:

【代码5-1】

01  TEMPLATES = [
02      {
03          'BACKEND': 'django.template.backends.django.DjangoTemplates',
04          'DIRS': [],
05          'APP_DIRS': True,
06          'OPTIONS': {
07              # ... some options here ...
08          },
09      },
10  ]

【代码分析】

在第01行代码中,通过TEMPLATES定义了一个配置列表。

在第03行代码中,配置参数BACKEND定义了实现模板引擎类的后台路径。内置的模板引擎类后台路径为“django.template.backends.django.DjangoTemplates”和“django.template.backends.jinja2.Jinja2”。

在第04行代码中,配置参数DIRS定义了目录列表,引擎应在目录中按搜索顺序查找模板源   文件。

在第05行代码中,配置参数APP_DIRS通知模板引擎是否应在已安装的应用程序内查找模板。每个后端应该为在内部存储其模板的应用程序中的子目录定义一个常规名称。另外,虽然不常见,但可以使用不同的选项配置同一后端的多个实例。在这种情况下,应该为每个引擎定义一个唯一的名称(Name)。

在第06行代码中,配置参数OPTIONS包含了一些特殊的后台配置。

下面,通过新建一个Django框架模板的项目(TmplSite),来查看项目默认配置的TEMPLATES模板参数的情况。

【代码5-2】

01  TEMPLATES = [
02      {
03          'BACKEND': 'django.template.backends.django.DjangoTemplates',
04          'DIRS': [],
05          'APP_DIRS': True,
06          'OPTIONS': {
07              'context_processors': [
08                  'django.template.context_processors.debug',
09                  'django.template.context_processors.request',
10                  'django.contrib.auth.context_processors.auth',
11                  'django.contrib.messages.context_processors.messages',
12              ],
13          },
14      },
15  ]

【代码分析】

这段实际的TEMPLATES模板配置参数与【代码5-1】基本吻合,区别就是在OPTIONS配置中添加了一些额外的参数。

5.2.2  模板引擎用法

在Django框架模板引擎的加载模块中,定义了两个函数来实现模板的加载功能,具体介绍   如下:

1. get_template(template_name, using=None)函数

该函数的说明如下:

  • 该函数通过给定的名称实现模板的加载,同时返回一个模板对象。其返回值的确切类型取决于加载模板的后端,每个后端都有自己模板类。
  • 该函数按顺序使用每个模板引擎去查找指定模板,直到成功为止。如果找不到模板,则会引发TemplateDoesNotExist异常。如果模板被找到了却包含了无效语法,则会引发TemplateSyntaxError异常。
  • 该函数搜索和加载模板的方式,依赖于每个引擎的后端和配置。

如果想将搜索限制在特定的模板引擎中,可在using参数中传递引擎的名称。

2. select_template(template_name_list, using=None)函数

该函数的说明如下:

  • 该函数与get_template()函数基本一样,只不过它需要一个模板名称列表。
  • 该函数会按给定的模板名称列表顺序查找模板,并返回找到的第一个存在的模板。
  • 如果加载模板失败,则可能会引发django.template模块中定义的以下两个异常。
  1. TemplateDoesNotExist(msg, tried=None, backend=None, chain=None)异常:当找不到模板时,会引发此异常。其接收以下用在调试页面上的可选参数。
  • backend参数:表示来源自异常的模板后端实例。
  • tried参数:表示在查找模板时尝试过的来源列表。其格式为包含来源(origin)、状态(status)的元组列表,其中来源(origin)是一个类似origin的对象,而状态(status)是一个找不到模板原因的字符串。
  • chain参数:表示一个在尝试加载一个模板时被立即引发的TemplateDoesNotExist异常列表。其被诸如get_template()之类的函数所使用,这些函数尝试从多个引擎加载给定的模板。
  1. TemplateSyntaxError(msg)异常,当找到模板但包含错误时会引发此异常。

通过get_template()函数和select_template()函数返回的模板对象,必须提供具有以下签名的render()方法。

方法名称:Template.render(context=None, request=None)

方法说明:该方法使用给定的上下文渲染此模板。如果提供了上下文,则必须是一个字典类型;如果未提供上下文,则引擎将使用空的上下文呈现模板;如果提供了请求,则其必须是一个HttpRequest对象。然后,模板引擎必须使其自身以及CSRF令牌在模板中可用。至于如何实现这一点,则取决于每个后端。

这里有一个关于搜索算法的代码示例,在该代码示例中将“TEMPLATES”选项设置如下:

【代码5-3】

01  TEMPLATES = [
02      {
03          'BACKEND': 'django.template.backends.django.DjangoTemplates',
04          'DIRS': [
05              '/home/html/example.com',
06              '/home/html/default',
07          ],
08      },
09      {
10          'BACKEND': 'django.template.backends.jinja2.Jinja2',
11          'DIRS': [
12              '/home/html/jinja2',
13          ],
14      },
15  ]

【代码分析】

如果尝试调用get_template('story_detail.html')方法,则Django框架模板引擎将按如下顺序查找文件:

/home/html/example.com/story_detail.html('django' engine)
/home/html/default/story_detail.html('django' engine)
/home/html/jinja2/story_detail.html('jinja2' engine)

如果尝试调用“select_template(['story_123_detail.html', 'story_detail.html'])”方法,则Django框架模板引擎将按如下顺序查找文件:

/home/html/example.com/story_123_detail.html('django' engine)
/home/html/default/story_123_detail.html('django' engine)
/home/html/jinja2/story_123_detail.html('jinja2' engine)
/home/html/example.com/story_detail.html('django' engine)
/home/html/default/story_detail.html('django' engine)
/home/html/jinja2/story_detail.html('jinja2' engine)

当Django框架发现存在的模板时,将停止继续往下查找。

在每个包含模板的目录内,在其子目录中组织模板是可能的,或许也是更好的选择。在设计架构时采用的常规做法是,为每个Django框架应用创建一个子目录,并根据需要在这些子目录内创建下一级子目录。这样的做法其实是很明智的,因为将所有的模板存储在单个目录的根目录中是会很麻烦的。

【图书介绍】《Django 5企业级Web应用开发实战(视频教学版)》_django 5企业级web应用开发实战(视频教学版)-CSDN博客

《Django 5企业级Web应用开发实战(视频教学版)》(王金柱)【摘要 书评 试读】- 京东图书 (jd.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1983331.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux之进程间通信(上)

目录 进程间通信的目的 进程通信的分类 进程通信之匿名管道 创建匿名管道 匿名管道的特点 匿名管道四种通信类型 在现实生活中,人们要进行合作,就必须进行交流,那么在进程之间,会存在交流的情景吗?答案是肯定的…

音频转换器在线哪个好?提升音频质量的转换工具

你是否曾梦想过将手机里的铃声变成自己的原创作品?或者,有没有想过将一段演讲录音转化为易于分享的MP3格式? 如果答案是肯定的,那么这款音频转换器mp3就是你寻找的答案。现在,让我们一起探索它的魅力吧! 一…

基于MATLAB机器学习、深度学习实践技术

近年来,MATLAB在机器学习和深度学习领域的发展取得了显著成就。其强大的计算能力和灵活的编程环境使其成为科研人员和工程师的首选工具。在无人驾驶汽车、医学影像智能诊疗、ImageNet竞赛等热门领域,MATLAB提供了丰富的算法库和工具箱,极大地…

浏览器用户文件夹详解 - Preferences(十)

1.Preferences简介 1.1 什么是Preferences文件? Preferences文件是Chromium浏览器中用于存储用户个性化设置和配置的一个重要文件。每当用户在浏览器中更改设置或安装扩展程序时,这些信息都会被记录在Preferences文件中。通过这些记录,浏览…

海思ISP记录七:低照度图像调整

Hi3519av100imx585 记录下低照度图像调整的流程和思路 一、环境与配置 环境:暗房不开灯,只有零散漏光和电脑光亮gain与帧率:根据手册我设置的是Again:31282;Dgain:8192;ISP Dgain:…

B1.1 关于应用程序员模型-概述

快速链接: . 👉👉👉 ARMv8/ARMv9架构入门到精通-[目录] 👈👈👈 付费专栏-付费课程 【购买须知】个人博客笔记导读目录(全部) B1.1 关于应用程序员模型–概述 本章节包含了应用程序开发所需的程序员模型信息。 本章节中的信息不同于支持和服务于操作系统下应用程…

1.MySQL面试题之innodb如何解决幻读

1. 写在前面 在数据库系统中,幻读(Phantom Read)是指在一个事务中,两次读取同一范围的数据集时,由于其他事务的插入操作,导致第二次读取结果集发生变化的问题。InnoDB 作为 MySQL 的一个存储引擎&#xff…

PyTorch深度学习实战(2)——PyTorch快速入门

PyTorch的简洁设计使得它易于入门,在深入介绍PyTorch之前,本文先介绍一些PyTorch的基础知识,以便读者能够对PyTorch有一个大致的了解,并能够用PyTorch搭建一个简单的神经网络。 1 Tensor Tensor是PyTorch中最重要的数据结构&#…

docker、k8s部署 mysql group replication 和 ProxySQL 读写分离

MySQL Group Replication(简称MGR)是MySQL官方推出的一个高可用与高扩展的解决方案。MySQL组复制它提供了高可用、高扩展、高可靠的MySQL集群服务,这里部署的 mysql 版本 5.7.33,架构是一读一写。特别要注意一个关键点: 必须保证各…

sqli-labs-php7-master第11-16关

猜注入点 先来猜数字型 单引号字符型: 发现注入点找到了 猜测数据库有多少个字段: 1’ order by 4 # 密码随便输的。 这里没有使用--注释,因为没作用,可能是过滤掉了 继续猜。刚才没猜对 1 order by 2 # 没报错,猜…

如何将neo4j,4.x版本部署到服务器上

一. 简介 当我们使用neo4j构建知识图谱时,我们希望让别人能和我们共用neo4j进行知识图谱的构建,我们的方法之一就是将neo4j部署到我们的服务器上,然后将7474,7687端口暴露出来,这样就可以通过访问服务器公网IP的7474端口来操作我…

电脑硬盘坏了数据可以恢复吗?如何恢复硬盘数据?

电脑硬盘坏了数据可以恢复吗?对于这种问题,还需要具体问题具体分析的,一般是可以恢复。 硬盘损坏可以分为物理损坏和逻辑损坏两种情况: 1.逻辑损坏 这通常是由于软件问题,如文件系统错误、病毒攻击、误删除、格式化等…

CentOS Linux release 7.9.2009 中sudo命令未找到

先在 Windows 环境中下载 sudo 的安装包 选择适合自己 Centos 版本的安装包下载到本地:https://www.sudo.ws/releases/stable/ 然后把安装包拷贝的 Centos (Linux系统)中,cd 进入安装包所在的目录执行下面的命令: 格…

【Unity】线性代数基础:矩阵、矩阵乘法、转置矩阵、逆矩阵、正交矩阵等

文章目录 矩阵(Matrix)矩阵能干啥?矩阵基本运算矩阵加减法矩阵和标量的乘法矩阵和矩阵的乘法矩阵的转置矩阵相等 特殊的矩阵方块矩阵对称矩阵对角元素(Diagonal Elements)对角矩阵(Diagonal Matrix&#xf…

sqli-labs-master初学者题目练习

Less-1 从源码可以看出id为注入点,且为单引号过滤 使用 闭合 --为注释 原本应该用--‘space’,但-与‘连在一起无法起到注释作用 order by为联合查询——同时查询两张表,但两张表列数必须相同 所有从以上两张图可以看出此表格有三列数据 爆…

计算机网络知识汇总(超详细整理)从零基础入门到精通,看完这一篇就够了

文章目录 前言一、计算机网络概述 1 互联网的构成2.网络分类3.接入网4.网络核心的两大功能 ①路由②转发 5.网络分层 ①OSI 7层模型②TCP/IP 4层模型③两种模型比较 二、物理层 1.物理介质 ①引导型介质②非引导型介质 2.数据交换方式 ①分组交换②电路交换 3.信道复用 …

在亚马逊云科技AWS上利用PEFT和RLHF高效微调AI大模型减少有害回复

简介: 小李哥将继续每天介绍一个基于亚马逊云科技AWS云计算平台的全球前沿AI技术解决方案,帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS AI最佳实践,并应用到自己的日常工作里。 本次我将介绍如何用亚马逊云科技的AI模型训练服…

基于K8S部署安装Jenkins

基于K8S部署安装Jenkins 1.Jenkins Kubernetes 清单文件2.Kubernetes Jenkins 部署1:为 Jenkins 创建 Namespace。 最好将所有DevOps工具分类为与其他应用程序分开的命名空间。2:创建“serviceAccount.yaml”文件并复制以下管理员服务帐户清单。1. kubec…

174.地下城游戏——LeetCode

题目 恶魔们抓住了公主并将她关在了地下城 dungeon 的 右下角 。地下城是由 m x n 个房间组成的二维网格。我们英勇的骑士最初被安置在 左上角 的房间里,他必须穿过地下城并通过对抗恶魔来拯救公主。 骑士的初始健康点数为一个正整数。如果他的健康点数在某一时刻…

文章生成器免费版,自动写作文章让你无创作之忧

对于创作者而言,长期的内容输出都会遇到写作瓶颈发生,这常常让许多创作者陷入写作困难。而当前解决写作困难最好的方法就是文章生成器了,它自动写作文章的优势让广大的创作者有目共睹,并且是很多创作者们在内容创作中人手必备的神…