首页 > 其他分享 > Django模板引擎

Django模板引擎

时间:2023-06-04 13:03:33浏览次数:41  
标签:文件 自定义 标签 Django 引擎 上下文 模板

       Django作为Web框架,需要一种很便利的方法动态地生成HTML网页,因此有了模板这个概念。模板包含所需HTML的部分代码以及一些特殊语法,特殊语法用于描述如何将视图传递的数据动态插入HTML网页中。

一个Jinja2。其他模板语言的后端可以从第三方获得。

Django 定义了一个标准的API,用于加载和渲染模板,而不考虑后端。加载包括为给定的标识符找到模板并对其进行预处理,通常是将其编译成内存中的表示形式。渲染是指将上下文数据插入模板,并返回结果字符串。Django内置的模板引擎包含模板上下文(亦可称为模板变量)、标签和过滤器,各个功能说明如下:

●模板上下文是以变量的形式写入模板文件里面,变量从上下文中输出一个值,上下文是一个类似于字典的对象,将键映射到值,变量值由视图函数或视图类传递所得。

标签是对模板上下文进行控制输出,比如模板上下文的判断和循环控制等。标签在渲染过程中提供了任意逻辑。这个定义是故意含糊的。例如,标签可以输出内容,或用作控制结构如

●模板继承隶属于标签,它是将每个模板文件重复的代码抽取出来并写在一个共用的模板文件中,其他模板文件通过继承共用模板文件来实现完整的网页输出。

过滤器是对模板上下文进行操作处理,比如模板上下文的内容截取、替换或格式转换等。过滤器转换变量和标签参数的值。

Django 模板是使用 Django 模板语言标记的一个文本文档或Python字符串。模板引擎可以识别和解释一些构造。主要是变量和标签。

模板是通过上下文来渲染的。渲染用变量的值替换变量,变量的值在上下文中查找,并执行标签。其他的一切都按原样输出。Django 模板语言的语法涉及四个构造

模板上下文是模板中基本的组成单位,上下文的数据由视图函数或视图类传递。它以{{ variable }}表示,variable是上下文的名称,它支持Python所有的数据类型,如字典、列表、元组、字符串、整型或实例化对象等。上下文的数据格式不同,在模板里的使用方式也有所差异,如下所示:[插图]从上述代码发现,如果上下文的数据带有属性,就可以在上下文的末端使用“.”来获取某个属性的值。比如上下文为字典或实例化对象,在上下文末端使用“.”并写入属性名称即可在网页上显示该属性的值;若上下文为元组或列表,则在上下文末端使用“.”并设置索引下标来获取元组或列表的某个元素值


                             Django模板引擎_数据


标签是对模板上下文进行控制输出,它是以{% tag %}表示的,其中tag是标签的名称,Django内置了许多模板标签,比如{% if %}(判断标签)、{% for %}(循环标签)或{% url %}(路由标签)等。内置的模板标签可以在Django源码(\django\template\defaulttags.py)里找到定义过程,每个内置标签都有功能注释和使用方法

                             Django模板引擎_标签名_02


在for标签中,模板还提供了一些特殊的变量来获取for标签的循环信息

                             Django模板引擎_标签名_03


除了使用内置的模板标签之外,我们还可以自定义模板标签。以MyDjango为例,在项目的根目录下创建新的文件夹,文件夹名称可自行命名,本示例命名为mydefined;然后在该文件夹下创建初始化文件__init__.py和templatetags文件夹,其中templatetags文件夹的命名是固定不变的;最后在templatetags文件夹里创建初始化文件__init__.py和自定义标签文件mytags.py

由于在项目的根目录下创建了mydefined文件夹,因此在配置文件settings.py的属性INSTALLED_APPS里添加mydefined,否则Django在运行时无法加载mydefined文件夹的内容

下一步在项目的mytags.py文件里自定义标签,我们将定义一个名为reversal的标签,它是将标签里的数据进行反转处理

在mytags.py文件里分别定义了类ReversalNode和函数do_reversal,两者实现功能说明如下:

●函数do_reversal经过装饰器register.tag(name='reversal')处理,这是让函数执行模板标签注册,标签名称由装饰器参数name进行命名,如果没有设置参数name,就以函数名作为标签名称。函数名没有具体要求,一般以“do_标签名称”或“标签名称”作为命名规范。

●函数参数parse是解析器对象,当Django运行时,它将所有标签和过滤器进行加载并生成到parse对象,在解析模板文件里面的标签时,Django就会从parse对象查找对应的标签信息。

●函数参数token是模板文件使用标签时所传递的数据对象,主要包括标签名和数据内容。

●函数do_reversal对参数token使用split_contents()方法(Django的内置方法)进行取值处理,从中获取数据value,并将value传递给自定义模板节点类ReversalNode。

●类ReversalNode是将value执行字符串反转处理,并生成模板节点对象,用于模板引擎解析HTML语言

在模板文件index.html中使用自定义标签时,必须使用{% load mytags %}将自定义标签文件导入,告知模板引擎从哪里查找自定义标签,否则无法识别自定义标签,并提示TemplateSyntaxError异常。运行MyDjango项目,在浏览器上访问127.0.0.1:8000,网页上会将“Django”反转显示

标签:文件,自定义,标签,Django,引擎,上下文,模板
From: https://blog.51cto.com/576642026/6410403

相关文章

  • Django迁移数据库编码错误
    mysql编码错误问题出现在用django的admin组件向数据库添加数据时发生的编码错误(1366,"Incorrectstringvalue:'\\xE5\\x8D\\x83\\xE7\\x89\\x9B...'forcolumn'title'atrow1")以为django可以进行数据库的迁移,但是你还是要去手动在mysql中创建一个数据库名,所以在创建的......
  • 广州网站建设干货:定制网站建设与模板网站不同之处!
    定制网站建设与模板网站有什么不同之处?在企业建设网站的过程中,通常会面临一个选择,那就是究竟:使用模板网站,还是采用定制网站建设。虽然这两种方式都可以创建出一个有效的网站,但哪种模式可以让你的企业做得更大更好呢?广州名锐讯动从不同维度分析两者,总结了以下几点干货给大家!首先我们......
  • 搜索引擎 回车键 变成换行了怎么处理?
    搜索引擎回车键变成换行了怎么处理?Enter键未在GoogleChrome中执行搜索的可能原因有几个。键盘驱动程序或硬件问题。Chrome扩展。Chrome中的设置。要解决此问题,您可以尝试以下步骤:检查您的键盘驱动程序和硬件。确保您的键盘已正确插入并且驱动程序是最新的。您可以尝试重新......
  • 模板方法模式
    TheTemplateMethoddesignpatterndefinestheskeletonofanalgorithminanoperation,deferingsomestepstosubclasses.Thispatternletssubclassesredefinecertainstepsofanalgorithmwihoutchangingthealgorithm'sstructure.模板方法设计模式在操作中......
  • WPF 入门笔记 - 03 - 样式基础及控件模板
    ......
  • 模板引擎 Handlebars.js
    概述Handlebars.js是一个简单而强大的JavaScript模板引擎。它允许开发者通过定义模板和数据来生成动态的HTML页面。Handlebars.js基于Mustache模板语法,它提供了一些扩展和增强功能。并且开发者可以创建可重用的模板,并通过将数据传递给模板来生成最终的输出。这种分离数......
  • 使用Django创建一个项目
    ......
  • pongo2 类似django 语法的golang 模版引擎
    pongo2类似django语法的golang模版引擎,当前兼容django1.7同时还包含了强大的三方生态支持(比如beego,gin,echo框架。。。)参考使用main.gopackagemainimport("fmt""log""github.com/flosch/pongo2/v6")funcmain(){tpl,err:=pongo2.FromFile("message.tpl"......
  • 3、利用初始化好的虚拟机当作模板,用于克隆
    利用初始化好的虚拟机当作模板,用于克隆第一步:先拷贝个虚拟机当作模板[root@ubuntimages]#virt-clone-orocky8-f/var/lib/libvirt/images/rocky8-template.qcow2-nrocky8-templateAllocating'rocky8-template.qcow2'......
  • 4、虚拟机单机、集群的克隆、删除脚本(以初始化好的虚拟机为模板)
    虚拟机克隆、删除脚本[root@ubunt~]#catclone.sh#!/bin/bash##./etc/init.d/functions(如果是ubuntu,注释此行)Red="\e[1;31m"Purple="\e[1;35m"Green="\e[1;32m"Blue="\e[1;36m"Yellow="\e[1;33m"End="\e[0m&......