• Django模板引擎


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

    Django模板引擎

    Django 内置的模板引擎包含模板上下文(亦可称为模板变量)、标签 和 过滤器,各个功能说明如下:

    • 模板上下文是以变量的形式写入模板文件里画,变量值由视图函数或视图类传递所得。
    • 标签是对模板上下文进行控制输出,比如模板上下文的判断和循环控制等。
    • 模板继承隶属于标签,它是将每个模板文件重复的代码抽取出来并写在一个共用的模板文件中,其他模板文件通过继承共用模板文件来实现完整的网页输出。
    • 过滤器是对模板上下文进行操作处理,比如模板上下文的内容截取、替换或格式转换等。

    1、模板上下文

    模板上下文是模板中基本组成单位,上下文的数据由视图函数或视图类传递。它以 {{ variable }} 表示,variable 是上下文的名称,它支持 Python 所有的数据类型,如字典、列表、元组、字符串、整形或实例化对象等。上下文的数据格式不同,在模板里的使用方式也有所差异,如下所示:

    # 假如 variable1 = '字符串或整型'
    <div>{{ variable1 }}</div>
    # 输出 “<div>字符串或整型</div>”
    
    # 假如 variable2 = {'name': '字典或实例化对象'}
    <div>{{ variable2.name }}</div>
    # 输出 “<div>字典或实例化对象</div>”
    
    # 假如 variable3 = ['元组或列表']
    <div>{{ variable3.0 }}</div>
    # 输出 “<div>元组或列表</div>

    2、 Django常用内置标签

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

    常用的内置标签
    标签 描述
    { % for % } 遍历输出上下文的内容
    { % if % } 对上下文进行条件判断
    { % csrf_token % } 生成csrf token的标签,用于防护跨站请求伪造攻击
    { % url % } 引用路由配置的地址,生成相应的路由地址
    { % with % } 将上下文名重新命名
    { % load % } 加载导入Django的标签库
    { % static % } 读取静态资源的文件内容
    { % extends xxx % } 模板继承,xxx为模板文件名,使当前模板继承xxx模板
    { % block xxx % } 重写父类模板的代码

    3、Django过滤器

    过滤器主要是对上下文的内容进行操作处理,如替换、反序和转义等。通过过滤器处理上下文可以将其数据格式或内容转化为我们想要的显示效果,而且相应减少视图的代码量。过滤器的使用方法如下:

    {{ variable | filter }}

    若上下文设有过滤器,则模板引擎在解析上下文时,首先由过滤器 filter 处理上下文 variable,然后将处理后的结果进行解析并显示在网页上。variable 代表模板上下文,管道符号 "|" 代表当前上下文使用过滤器,filter 代表某个过滤器。单个上下文可以支持多个过滤器同时使用,例如:

    {{ variable | filter | lower }}

    在使用的过程中,有些过滤器还可以传入参数,但仅支持传入一个参数,带参数的过滤器与参数之间使用冒号隔开,并且两者之间不能留有空格,例如:

    {{ variable | date:"D d M Y" }}

    Django的内置过滤器可以在源码(django emplatedefaultfilters.py)里找到具体的定义过程,这里本人就不在一一列举。

    希望以上内容可以帮助到各位。

  • 相关阅读:
    如何借助BM算法轻松理解KMP算法
    如何实现文本编辑器中的查找替换功能?——BF算法
    C++中求数组长度与memset的用法
    什么是素数/质数/合数
    深度和广度优先搜索:如何找出社交网络中的三度好友关系?
    如何存储微博、微信等社交网络中的好友关系?
    为什么说堆排序没有快速排序快?
    HTML5中标记与特殊属性
    margin外边距问题
    html热点区域
  • 原文地址:https://www.cnblogs.com/xcbb/p/14713997.html
Copyright © 2020-2023  润新知