一 简介

在Flask中,调用render_template来对模版进行渲染,使用render_template,只需要导入这个API就可以,from flask import render_template

模板仅仅是文本文件。它可以生成任何基于文本的格式(HTML、XML、CSV、LaTex 等等)。 它并没有特定的扩展名, .html 或 .xml 都是可以的。

模板包含 变量 或 表达式 ,这两者在模板求值的时候会被替换为值。模板中 还有标签,控制模板的逻辑

二 变量

应用把变量传递到模板,你可能在模板中弄混。变量上面也可以有你能访问的属性或元 素。变量看起来是什么,完全取决于应用提供了什么。

你可以使用点( . )来访问变量的属性,作为替代,也可以使用所谓的“下标”语 法( [])。下面的几行效果是一样的:

  1. {{ foo.bar }}
  2. {{ foo['bar'] }}

三 条件语句if

  1. {% if users %}
  2. <ul>
  3. {% for user in users %}
  4. <li>{{ user.username|e }}</li>
  5. {% endfor %}
  6. </ul>
  7. {% endif %}
  1. {% if kenny.sick %}
  2. Kenny is sick.
  3. {% elif kenny.dead %}
  4. You killed Kenny! You bastard!!!
  5. {% else %}
  6. Kenny looks okay --- so far
  7. {% endif %}

四 迭代遍历for 

  1. <h1>Members</h1>
  2. <ul>
  3. {% for user in users %}
  4. <li>{{ user.username|e }}</li>
  5. {% endfor %}
  6. </ul>
  7.  
  8. 模板中的变量保留它们的对象属性,可以迭代像 dict 的容器
  1. <dl>
  2. {% for key, value in my_dict.iteritems() %}
  3. <dt>{{ key|e }}</dt>
  4. <dd>{{ value|e }}</dd>
  5. {% endfor %}
  6. </dl>

在一个 for 循环块中你可以访问这些特殊的变量:

变量 描述
loop.index 当前循环迭代的次数(从 1 开始)
loop.index0 当前循环迭代的次数(从 0 开始)
loop.revindex 到循环结束需要迭代的次数(从 1 开始)
loop.revindex0 到循环结束需要迭代的次数(从 0 开始)
loop.first 如果是第一次迭代,为 True 。
loop.last 如果是最后一次迭代,为 True 。
loop.length 序列中的项目数。
loop.cycle 在一串序列间期取值的辅助函数。见下面的解释。

  1.  
  2. 模板中的循环内不能 break  continue,(除非启用Import name: jinja2.ext.loopcontrols,这个扩展添加了循环中的 break  continue 支持) 。但你可以在迭代 中过滤序列来跳过项目。下面的例子中跳过了所有隐藏的用户:
  1. {% for user in users if not user.hidden %}
  2. <li>{{ user.username|e }}</li>
  3. {% endfor %}
  4.  
  5. 递归
    只需要在循环定义中加上 recursive 修饰,并在你想使用递归的地 方,对可迭代量调用 loop 变量
  1. <ul class="sitemap">
  2. {%- for item in sitemap recursive %}
  3. <li><a href="{{ item.href|e }}">{{ item.title }}</a>
  4. {%- if item.children -%}
  5. <ul class="submenu">{{ loop(item.children) }}</ul>
  6. {%- endif %}</li>
  7. {%- endfor %}
  8. </ul>

五 测试if  is

  1. 测试可以用于对照普通表达式测试一个变量。 要测试一个变量或表达式,你要在变量后加上一个 is 以及测试的名称。例如,要得出 一个值是否定义过,你可以用 name is defined
    这会根据 name 是否定义返回 true false 
  2.  
  3. 测试也可以接受参数。如果测试只接受一个参数,你可以省去括号来分组它们。例如, 下面的两个表达式做同样的事情:
  1. {% if loop.index is divisibleby 3 %}
  2. {% if loop.index is divisibleby(3) %}
  1. 常见的测试函数有: callable(object)是否是一个函数, defined(value) 值是否定义,iterable(value)是否可迭代,lower(value)是否小写,none(value)是否为nonenumber(value)是否是数字
  2.  
  3. string(value)是否是字符串
  1. {% if variable is defined %}
  2. value of variable: {{ variable }}
  3. {% else %}
  4. variable is not defined
  5. {% endif %}
  1.  

六 注释

要把模板中一行的部分注释掉,默认使用 {# ... #} 注释语法

七 空白控制

剥离模板中的空白。当你在块(比如一个 for 标签、一段注释或变 量表达式)的开始或结束放置一个减号( - ),可以移除块前或块后的空白

  1. {% for item in seq -%}
  2. {{ item }}
  3. {%- endfor %}
  4.  
  5. 这会产出中间不带空白的所有元素。如果 seq 1 9 的数字的列表, 输出会是 123456789 
    标签和减号之间不能有空白

八 转义

最简单的方法是在变量分隔符中( {{ )使用变量表达式输出:

  1. {{ '{{' }}

对于较大的段落,标记一个块为 raw 是有意义的。例如展示 Jinja 语法的实例, 你可以在模板中用这个片段:

  1. {% raw %}
  2. <ul>
  3. {% for item in seq %}
  4. <li>{{ item }}</li>
  5. {% endfor %}
  6. </ul>
  7. {% endraw %}

九 赋值

在代码块中,你也可以为变量赋值。在顶层的(块、宏、循环之外)赋值是可导出的,即 可以从别的模板中导入。

赋值使用 set 标签,并且可以为多个变量赋值:

  1. {% set navigation = [('index.html', 'Index'), ('about.html', 'About')] %}
  2. {% set key, value = call_something() %}
  1.  

jinja2-模版简介的更多相关文章

  1. Jinja2模版语言自定义filter的使用

    Jinja2模版语言,自带有一些filter,能够在前端的模版中控制数据按照相应的方式显示.比如以下两种filter,分别能在前端控制数字的近似精度显示和根据字符串长度补齐: round(value, ...

  2. ansible基础-Jinja2模版 | 过滤器

    Jinja2模版介绍 注:本文demo使用ansible2.7稳定版 在ansible基础-变量的「8.2 模版使用变量」章节中关于模版与变量也有所提及,有兴趣的同学可以去回顾一下. ansible通 ...

  3. Flask的Jinja2模版过滤器

    Jinja2模版过滤器 过滤器是通过管道符号(|)进行使用的,例如:{{ name|length }},将返回name的长度.过滤器相当于是一个函数,把当前的变量传入到过滤器中,然后过滤器根据自己的功 ...

  4. 第四章 Jinja2模版

    模板简介: 在之前的章节中,视图函数只是直接返回文本,而在实际生产环境中的页面大多是带有样式和复杂逻辑的HTML代码,这可以让浏览器渲染出非常漂亮的页面.目前市面上有非常多的模板系统,其中最知名好用的 ...

  5. ansible基础-Jinja2模版 | 测试

    一 简介 注:本文demo使用ansible2.7稳定版 Jinja2的测试语句被用来评估一个条件表达式,并且最终返回True或False,经常和「when」语句搭配使用. 测试语句和过滤器的相同点: ...

  6. 5 JInja2模版(适用于Django和Flask)

    模版 在生产环节下,我们要把后端程序(其实就是python)计算出来的数据和html页面结合起来做,这个时候模版就派上大用处了. Flask下的模版---Jinja2 Jinja是日本寺庙的意思,并且 ...

  7. ansible使用jinja2管理配置文件以及jinja2语法简介

    一.Jinja2介绍 Jinja2是基于python的模板引擎,功能比较类似于PHP的smarty,J2ee的Freemarker和velocity.它能完全支持unicode,并具有集成的沙箱执行环 ...

  8. 动软代码生成V2.74模版简介

    最近发现很多人用动软代码生成,确实方便,有些经验记录下,以后查看回顾. ..\Maticsoft\Codematic2\Template\TemplateFile 为模板文件夹,直接在目录下新建文件夹 ...

  9. flask 渲染jinja2模版和传参

    渲染模版(html文件) A.模版文件(html)放入到template目录下,项目启动的时候会从template目录里查找, B.从flask中导入“render_tempalte”函数 C.在视图 ...

  10. mvc4安装、新建、模版简介

    第一安装 mvc4 1.Visual Studio 2012本身就包含MVC4另外无需安装. 2.Vs2010 需要安装vs2010 sp1补丁,后再安装mvc4安装包(官网下载即可) 第二 创建mv ...

随机推荐

  1. VUE CLI3 less 全局变量引用

    方法一 1.添加依赖 style-resources-loader 2.vue.config.js中添加 module.exports = { pluginOptions: { 'style-reso ...

  2. 对SPI进行参数化结构设计

    前言 为了避免每次SPI驱动重写,直接参数化,尽量一劳永逸. SPI master有啥用呢,你发现各种外围芯片的配置一般都是通过SPI配置的,只不过有3线和四线. SPI slave有啥用呢,当外部主 ...

  3. Android写入文件电脑看不到

    原因是因为没有刷新,写入文件后执行以下代码即可. 根目录路径: File newfile = new File(Environment.getExternalStorageDirectory() + ...

  4. EF方式增、删、改、查(基本使用)

    右击项目——添加——新建项——数据(C#)——选择ADO.NET实体数据模型——点击添加——然后根据实体数据模型向导来一步步的做. 用到的表 using System; using System.Da ...

  5. InnoDB全文索引

    ### 如果想了解全文索引,可以直接将本文复制到mysql的新建查询中,依次执行,即可了解全文索引的相关内容及特性. -- InnoDB全文索引 -- 建表 CREATE TABLE fts_a ( ...

  6. Computer Vision_33_SIFT:Object recognition from local scale-invariant features——1999

    此部分是计算机视觉部分,主要侧重在底层特征提取,视频分析,跟踪,目标检测和识别方面等方面.对于自己不太熟悉的领域比如摄像机标定和立体视觉,仅仅列出上google上引用次数比较多的文献.有一些刚刚出版的 ...

  7. CentOS7使用Qemu模拟ARM64

    准备 RPM包安装 yum安装交叉编译工具 yum install -y binutils-aarch64-linux-gnu gcc-aarch64-linux-gnu bison flex gli ...

  8. 【2017-07-03】JS连续删除table中的选中的多行数据

    deleteRow() 连续删除多行 应用:删除表格选中的一行或多行.html代码如下: <table > <tr> <td >复选框</td> < ...

  9. Ubuntu安装cmake 3.9

    wget https://cmake.org/files/v3.9/cmake-3.9.2.tar.gz # 下载 cd cmake-3.9.2 ./configure sudo make & ...

  10. K8S漏洞报告 | 近期bug fix解读&1.13主要bug fix汇总

    K8s近期漏洞详解 Kubernetes仪表盘漏洞(CVE-2018-18264) 因为这一漏洞,用户可以“跳过”登录过程获得仪表盘所使用的自定义TLS证书.如果您已将Kubernetes仪表盘配置为 ...