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


    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;
    
    单引号' 转换为 &#39;
    
    双引号" 转换为 &quot;
    
    与符号& 转换为 &amp;

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

    {{t1|escape}}

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

    {{data|safe}}

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

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

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

  • 相关阅读:
    NET中的类型和装箱/拆箱原理
    转 C# 装箱和拆箱[整理]
    理解线程同步
    IsBackground的理解
    赛马会面试题
    FTP上传类
    FTPS加密上传
    转载WPF SDK研究 之 AppModel
    SQL Server查看错误日志存档编号及其详情
    Hive基础编程入门(一)
  • 原文地址:https://www.cnblogs.com/liuhui0308/p/12230442.html
Copyright © 2020-2023  润新知