Django作为Web框架,需要一种很便利的方法动态地生成HTML网页,因此有了模板这个概念。模板包含所需HTML的部分代码以及一些特殊语法,特殊语法用于描述如何将视图传递的数据动态插入HTML网页中。
一个Jinja2。其他模板语言的后端可以从第三方获得。
Django 定义了一个标准的API,用于加载和渲染模板,而不考虑后端。加载包括为给定的标识符找到模板并对其进行预处理,通常是将其编译成内存中的表示形式。渲染是指将上下文数据插入模板,并返回结果字符串。Django内置的模板引擎包含模板上下文(亦可称为模板变量)、标签和过滤器,各个功能说明如下:
●模板上下文是以变量的形式写入模板文件里面,变量从上下文中输出一个值,上下文是一个类似于字典的对象,将键映射到值,变量值由视图函数或视图类传递所得。
●标签是对模板上下文进行控制输出,比如模板上下文的判断和循环控制等。标签在渲染过程中提供了任意逻辑。这个定义是故意含糊的。例如,标签可以输出内容,或用作控制结构如
●模板继承隶属于标签,它是将每个模板文件重复的代码抽取出来并写在一个共用的模板文件中,其他模板文件通过继承共用模板文件来实现完整的网页输出。
●过滤器是对模板上下文进行操作处理,比如模板上下文的内容截取、替换或格式转换等。过滤器转换变量和标签参数的值。
Django 模板是使用 Django 模板语言标记的一个文本文档或Python字符串。模板引擎可以识别和解释一些构造。主要是变量和标签。
模板是通过上下文来渲染的。渲染用变量的值替换变量,变量的值在上下文中查找,并执行标签。其他的一切都按原样输出。Django 模板语言的语法涉及四个构造
模板上下文是模板中基本的组成单位,上下文的数据由视图函数或视图类传递。它以{{ variable }}表示,variable是上下文的名称,它支持Python所有的数据类型,如字典、列表、元组、字符串、整型或实例化对象等。上下文的数据格式不同,在模板里的使用方式也有所差异,如下所示:[插图]从上述代码发现,如果上下文的数据带有属性,就可以在上下文的末端使用“.”来获取某个属性的值。比如上下文为字典或实例化对象,在上下文末端使用“.”并写入属性名称即可在网页上显示该属性的值;若上下文为元组或列表,则在上下文末端使用“.”并设置索引下标来获取元组或列表的某个元素值
标签是对模板上下文进行控制输出,它是以{% tag %}表示的,其中tag是标签的名称,Django内置了许多模板标签,比如{% if %}(判断标签)、{% for %}(循环标签)或{% url %}(路由标签)等。内置的模板标签可以在Django源码(\django\template\defaulttags.py)里找到定义过程,每个内置标签都有功能注释和使用方法
在for标签中,模板还提供了一些特殊的变量来获取for标签的循环信息
除了使用内置的模板标签之外,我们还可以自定义模板标签。以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