Django框架(十一):模板介绍、模板语言、模板继承、HTML转义

时间:2023-02-04 20:45:13

1. 模板介绍

1.1 模板的功能

产生html,控制页面上展示的内容。模板文件不仅仅是一个html文件。

模板文件包含两部分内容:

静态内容:css、js、html。

动态内容:用于动态去产生一些页面内容。通过模板语言来产生。

1.2 模板文件的使用

通常是在视图函数中使用模板产生html内容返回给客户端。

加载模板文件loader.get_template,获取模板文件的内容,产生一个模板对象。

定义模板上下文RequeseContext,给模板文件传递数据。

模板渲染产生html页面内容render,用传递的数据替换相应的变量,产生一个替换后的标准的html内容。

1.3 模板文件加载顺序

首先去配置的模板目录下面去找模板文件。

去INSTALLED_APPS下面的每个应用的templates去找模板文件,前提是应用中必须有templates文件夹。

2. 模板语言

2.1 变量

模板变量的作用是计算并输出,变量名必须由字母、数字、下划线(不能以下划线开头)和点组成。

语法如下:

{{变量}}

当模版引擎遇到点如book.title,会按照下列顺序解析:

1.字典book['title']

2.先属性后方法,将book当作对象,查找属性title,如果没有再查找方法title()

3.如果是格式为book.0则解析为列表book[0]

如果变量不存在则插入空字符串''。

在模板中调用方法时不能传递参数。

例如:

{{book.btitile}}

首先把book当成一个字典,把btitle当成键名,进行取值book['btitle']。

把book当成一个对象,把btitle当成属性,进行取值book.btitle。

把book当成一个对象,把btitle当成对象的方法,进行取值book.btitle。

例如:

{{book.0}}

首先把book当成一个字典,把0当成键名,进行取值book[0]。

把book当成一个列表,把0当成下标,进行取值book[0]。

如果解析失败,则产出内容时用空字符串填充模板变量。

使用模板变量时,前面的困难是一个字典,可能是一个对象,还可能是一个列表。

2.2 标签

语法如下:

{%代码段%}

for标签语法如下:

{%for item in 列表%}
循环逻辑
{{forloop.counter}}表示当前是第几次循环,从1开始
{%empty%}
列表为空或不存在时执行此逻辑
{%endfor%}

if标签语法如下:

{%if ...%}
逻辑1
{%elif ...%}
逻辑2
{%else%}
逻辑3
{%endif%}

比较运算符如下:

运算符左右两端不能紧挨变量或常量,必须有空格。

==
!=
<
>
<=
>=

布尔运算符如下:

and
or
not

2.3 过滤器

语法如下:

使用管道符号|来应用过滤器,用于进行计算、转换操作,可以使用在变量、标签中。

如果过滤器需要参数,则使用冒号:传递参数。

变量|过滤器:参数

长度length,返回字符串包含字符的个数,或列表、元组、字典的元素个数。

默认值default,如果变量不存在时则返回默认值。

data|default:'默认值'

日期date,用于对日期类型的值进行字符串格式化,常用的格式化字符如下:

Y表示年,格式为4位,y表示两位的年。

m表示月,格式为01,02,12等。

d表示日, 格式为01,02等。

j表示日,格式为1,2等。

H表示时,24进制,h表示12进制的时。

i表示分,为0-59。

s表示秒,为0-59。

value|date:"Y年m月j日  H时i分s秒"

2.4 注释

在模板中使用如下模板注释,这段代码不会被编译,不会输出到客户端; html注释只能注释html内容,不能注释模板语言。

单行注释语法如下:

{#...#}

注释可以包含任何模版代码,有效的或者无效的都可以。

{# { % if foo % }bar{ % else % } #}

多行注释使用comment标签,语法如下:

{%comment%}
...
{%endcomment%}

3. 模板继承

模板继承和类的继承含义是一样的,主要是为了提高代码重用,减轻开发人员的工作量。

典型应用:网站的头部、尾部信息。

3.1 父模板

如果发现在多个模板中某些内容相同,那就应该把这段内容定义到父模板中。

标签block:用于在父模板中预留区域,留给子模板填充差异性的内容,名字不能相同。 为了更好的可读性,建议给endblock标签写上名字,这个名字与对应的block名字相同。父模板中也可以使用上下文中传递过来的数据。

{%block 名称%}
预留区域,可以编写默认内容,也可以没有默认内容
{%endblock 名称%}

3.2 子模板

标签extends:继承,写在子模板文件的第一行。

{% extends "父模板路径"%}

子模版不用填充父模版中的所有预留区域,如果子模版没有填充,则使用父模版定义的默认值。

填充父模板中指定名称的预留区域。

{%block 名称%}
实际填充内容
{{block.super}}用于获取父模板中block的内容
{%endblock 名称%}

4. HTML转义

模板对所有传递的文字进行输出时,合并以下字符自动转义。

小于号< 转换为 &lt;

大于号> 转换为 &gt;

单引号' 转换为 '

双引号" 转换为 &quot;

与符号& 转换为 &amp;

过滤器escape可以实现对变量的html转义,默认模板就会转义,一般省略。

{{t1|escape}}

过滤器safe:局部转义,告诉模板这个变量是安全的,可以解释执行。

{{data|safe}}

标签autoescape:设置一段代码都局部转义,接受on,off参数。

{%autoescape off%}
...
{%endautoescape%}

模板硬编码中的字符串默认不会经过转义,如果需要转义,那需要手动进行转义。

Django框架(十一):模板介绍、模板语言、模板继承、HTML转义的更多相关文章

  1. ThinkPHP框架视图详细介绍 View 视图--模板(九)

    原文:ThinkPHP框架视图详细介绍 View 视图--模板(九) 视图也是ThinkPHP使用的核心部分: 一.模板的使用 a.规则 模板文件夹下[TPL]/[分组文件夹/][模板主题文件夹/]和 ...

  2. Django框架之第五篇(模板层) --变量、过滤器、标签、自定义标签、过滤器,模板的继承、模板的注入、静态文件

    模板层 模板层就是html页面,Django系统中的(template) 一.视图层给模板传值的两种方法 方式一:通过键值对的形式传参,指名道姓的传参 n = 'xxx'f = 'yyy'return ...

  3. Django框架学习-01Django介绍

    01-Django介绍 02-HTTP协议介绍 01-Django介绍 1.什么是Web框架? 随着Web最新发展趋势的不断升级,Web项目开发也越来越难,而且需要花费更多的开发时间.所以,Web程序 ...

  4. Django框架----路由系统、视图和模板(简单介绍)

    一.路由配置系统(urls) URL配置(URLconf)就像Django所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表: 你就是以这种方式告诉Django,对于这个URL ...

  5. Python Django框架笔记(六):模板

    (一){%%}和{{ }} {% for post in posts %} <a href=""><h2>{{ post.title }}</h2&g ...

  6. &lbrack;Python自学&rsqb; day-18 &lpar;2&rpar; &lpar;MTV架构、Django框架、模板语言&rpar;

    一.实现一个简单的Web服务器 使用Python标准库提供的独立WSGI服务器来实现MVC架构. 首先,实现一个简单的Web服务器: from wsgiref.simple_server import ...

  7. &lbrack;Python自学&rsqb; Flask框架 &lpar;1&rpar; &lpar;Flask介绍、配置、Session、路由、请求和响应、Jinjia2模板语言、视图装饰器&rpar;

    oldboy:s9day114 参考博客:https://www.cnblogs.com/wupeiqi/articles/7552008.html 一.Flask简介 1.安装Flask pip i ...

  8. 第三百一十节,Django框架,模板语言

    第三百一十节,Django框架,模板语言 模板语言就是可以将动态数据在html模板渲染的语言 一.接收值渲染 locals()函数,写在请求响应render()函数里,可以将逻辑处理函数里的变量传到h ...

  9. Django框架 之 模板语言

    Django框架 之 模板语言 浏览目录 标签 过滤器 一.标签 Tags 1.普通变量 普通变量用{{ }} 变量名由数字.字母.下划线组成 点.在模板语言中用来获取对象相应的属性值 示例: 1 2 ...

随机推荐

  1. &lbrack;LeetCode&rsqb; Sort Characters By Frequency 根据字符出现频率排序

    Given a string, sort it in decreasing order based on the frequency of characters. Example 1: Input: ...

  2. 网页中嵌入可以点击&OpenCurlyDoubleQuote;运行代码”执行html&sol;css&sol;js代码

    html代码 <textarea name="textarea" cols="60" rows="10" id="rn01& ...

  3. mysql count&lpar;&ast;&rpar;和count&lpar;列&rpar;速率

    count(*)通常是对主键进行索引扫描,count(列)不一定 count(*)是统计表中所有符合的记录总数,count(列)是计算表中所有符合的列的记录数 count的时候,如果没有where限制 ...

  4. php多线程抓取信息测试例子

    php多线程抓取信息测试例子 PHP 5.3 以上版本,使用pthreads PHP扩展,可以使PHP真正地支持多线程.多线程在处理重复性的循环任务,能够大大缩短程序执行时间. PHP扩展下载:htt ...

  5. 利用 ffmpeg &plus; ImageMagick &plus; 批处理 生成高品质gif动画

    这几天研究如何生成高品质 gif 动画,重新研究 ffmpeg, 目前有一些自动转换工具,效果不佳. Video_to_320x180.bat 把 out.avi 转换成320x180的 01.avi ...

  6. Java基础之写文件——使用带缓冲的Writer写文件(WriterOutputToFile)

    控制台程序,将一列字符串写入到文件中. import java.io.*; import java.nio.file.*; import java.nio.charset.Charset; publi ...

  7. 详解YUV与RGB数据格式-2016&period;01&period;20

    参考文献 什么是I帧,P帧,B帧 图文详解YUV420数据格式 RGB565 与 RGB888的相互转换 最简单的基于FFmpeg的libswscale的示例(YUV转RGB)

  8. PHP字符

    匹配查找 strstr strpos 通常用在表单验证里面可以用到 substr 正值表达式匹配 preg_mathc(), preg)mathc_all() , preg_grep() 编码格式的转 ...

  9. 56、jsのBOM对象与DOM对象

    javascript的Bom和Dom对象使我们学习的重点,这篇随笔可以重点阅读 一.BOM对象 1.window对象 所有浏览器都支持 window 对象.概念上讲.一个html文档对应一个windo ...

  10. JSON的简单书写(初学),使用Java语言反序列化

    这个适合初学者:刚刚我学习的 1.基础的"JSON"     对象是用一对大括号: 例如: {      "name":"xiaohua", ...