接上文

注释的使用

在jinjia2模板中,使用{# #}进行代码注释,如下所示

运行后发现,注释不会被render出来

去掉空行

两种方法可以去掉jinjia2模板中的空白行,一是设置jinjia2的环境变量,如下

app.jinja_env.trim_blocks = True
app.jinja_env.lstrip_blocks = True

另一种是通过在模板的逻辑块中添加-号

{% if name -%}

  <h1>Hello {{ name | upper }}!</h1>

    <h1>name is number? {% if name is number %}true{% else  %}false{% endif %}</h1>

  {# 这是一大堆注释 #}

{%- else -%}

  <h1>Hello World!</h1>

{% endif %}
 

-在前面说明要除去前面的空行,在后面除去后面的空行,两边都加前后都去掉空白行。

注:-是标签的一部分,所以中间不要有空格

下面这种表达是不合法的:

{% - if xxx %}

转义

想要在模板中输出原生jinjia2语法,需要进行转义,转义有两种方法

一种是通过变量表达式直接输出语言关键字,比如

{{ "{{ 通过转义输出变量表达式 }}" }}

{{ "{%  通过转义输出逻辑表达式 %}" }}

转出效果:

另一种是通过raw关键字进行大块转义

{% raw %}

    <ul>

    {% for item in seq %}

        <li>{{ item }}</li>

    {% endfor %}

    </ul>

{% endraw %}

运行效果:

行语句

行语句就是把一行当成是jinjia2的语句行,设置一下jinjia2的line_statement_prefix变量即可实现。比如设置为“#”
app.jinja_env.line_statement_prefix="#"

同时在模板中加入行语句

# if True
<p>行语句输出</p>
# endif

运行效果:

 

行注释

通过设置line_comment_prefix可以实现行注释,步骤跟行语句一样,比如,我们设置:

app.jinja_env.line_comment_prefix = "$"

在模板中加入注释

$行注释,不输出

运行后,查看源码,发现注释没有被输出

关注“挨踢学霸”微信公众号,回复“jinjia2-2“ 获取本文源代码

flask中jinjia2模板使用详解2的更多相关文章

  1. flask中jinjia2模板引擎详解4

    接上文 For循环 和其它编程语言一样,for用来编辑列表中的项.下面以一个例子来说明for在flask的jinjia2模板中的使用. 创建一个模板list.html 代码如下{% extends & ...

  2. flask中jinjia2模板引擎详解3

    接上文 模板继承 Jinji2中的模板继承是jinjia2比较强大的功能之一. 模板继承可以定义一个父级公共的模板,把同一类的模板框架定义出来共享. 这样做一方面可以提取共享代码,减少代码冗余和重复的 ...

  3. flask中jinjia2模板引擎使用详解1

    在之前的文章中我们介绍过flask调用jinja2模板的基本使用,这次我们来说一下jinjia2模板的使用 Jinja2 在其是一个 Python 2.4 库之前,被设计 为是灵活.快速和安全的. 模 ...

  4. flask中jinjia2模板引擎使用详解5

    接上文 宏 可以理解为函数,即把一些常用的模板片段做好封装,以便于重用,减少工作量和维护难度. 宏的定义很简单: {%macro xxx()%} ##这里写内容 {%endmacro%}   下面引用 ...

  5. vue-cli 中的 webpack 配置详解

    本篇文章主要介绍了 vue-cli 2.8.2 中的 webpack 配置详解, 做个学习笔记 版本 vue-cli 2.8.1 (终端通过 vue -V 可查看) vue 2.2.2 webpack ...

  6. C#中string.format用法详解

    C#中string.format用法详解 本文实例总结了C#中string.format用法.分享给大家供大家参考.具体分析如下: String.Format 方法的几种定义: String.Form ...

  7. c++中vector的用法详解

    c++中vector的用法详解 vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间 ...

  8. 011-Scala中的apply实战详解

    011-Scala中的apply实战详解 object中的apply方法 class中的apply方法 使用方法 apply方法可以应用在类或者Object对象中 class类 必须要创建实例化的类对 ...

  9. C# WinForm 中 MessageBox的使用详解

    1.C# WinForm 中 MessageBox的使用详解:http://www.cnblogs.com/bq-blog/archive/2012/07/27/2611810.html

随机推荐

  1. MySql按日期进行统计

    1 数据库字段pk_time(Varchar) 当天的数据 SELECT * FROM 表 WHERE date(fk_time) = curdate(); 当月的数据 SELECT *FROM 表 ...

  2. webpack 介绍 & 安装 & 常用命令

    webpack 介绍 & 安装 & 常用命令 webpack系列目录 webpack 系列 一:模块系统的演进 webpack 系列 二:webpack 介绍&安装 webpa ...

  3. 【COOKIE 与 SESSION】

    一.相关概念 cookie的出现,解决http协议无状态特性 由于http协议无法保持状态,但实际情况,我们却又需要"保持状态",因此cookie就是在这样一个场景下诞生. 举例: ...

  4. crontab 定时任务守护程序,停止服务器时出现 job for * canceled

    (1)首先要在程序启动的时候加入定时任务到crontab #! /bin/shmkdir -p /home/apps/components/ams/ 2>/dev/nullcp ./amswat ...

  5. 【原创】源码角度分析Android的消息机制系列(四)——MessageQueue的工作原理

    ι 版权声明:本文为博主原创文章,未经博主允许不得转载. MessageQueue,主要包含2个操作:插入和读取.读取操作会伴随着删除操作,插入和读取对应的方法分别为enqueueMessage和ne ...

  6. 16_Python闭包

    一.什么是闭包 什么是闭包:内函数对外函数非全局变量的引用,并且外函数的返回值是内函数的引用(地址). def wrapper(): name = 'zhangsan' def inner(): na ...

  7. 浅谈WPF依赖项属性

    浅谈WPF依赖项属性 0. 引言 依赖项属性虽然在使用上和CLR属性一样,但是它是WPF特有的,不同于CLR属性.只是封装为我们常用CLR的属性,在语法使用上和CLR属性一样.WPF中一些功能:动画, ...

  8. python中的进程池

    1.进程池的概念 python中,进程池内部会维护一个进程序列.当需要时,程序会去进程池中获取一个进程. 如果进程池序列中没有可供使用的进程,那么程序就会等待,直到进程池中有可用进程为止. 2.进程池 ...

  9. appium+python环境搭建

    一.环境 1.安装python. 2.安装appium. 3.安装pip 4.安装selenium 5.安装Appium-Python-Client       #cmd->cd setupto ...

  10. Kakfa消息投递语义

    Message Delivery Semantics At most once -- Messages may be lost but are never redelivered(消息可能丢失但不会重 ...