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

在之前的文章中我们介绍过flask调用jinja2模板的基本使用,这次我们来说一下jinjia2模板的使用

Jinja2 在其是一个 Python 2.4 库之前,被设计为是灵活、快速和安全的。

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

模板包含 变量 或 表达式 ,这两者在模板求值的时候会被替换为值。模板中 还有标签,控制模板的逻辑。模板语法的大量灵感来自于 Django 和 Python 。

下面是一个最小的模板,它阐明了一些基础。我们会在文档中后面的部分解释细节:


通过上面的模板我们能看到主要有两类标签组成{{  }}和{% %}这两类标签分别用来包含变量和表达式

如何访问变量

如果传入的变量是对象,要访问对象中的属性,可以用下面两种方式:

{{obj.prop}}

{{obj[“prop”]}

两种方式都会去检查obj对象中有没有prop这个属性以及其中的其它变量,不同的是obj.prop先检查属性,obj[“prop”]先检查变量。

赋值

使用set关键字为变量设置值

<h1>Set为变量赋值h1>

{%set name = 'Han Mei Mei' %}

{{name }}

运行效果


变量过滤器

变量可以通过过滤器进行修改,变量和过滤器中间用|进行分隔,使用的基本格式是{{变量|过滤器1|过滤器2}},jinja2内置了很多过滤器,通过这些内置过滤器,可以进行变量的修改,内置过滤器可以参考http://docs.jinkan.org/docs/jinja2/templates.html#builtin-filters,比如我们要把变量转成大写,可以用upper过滤器


运行效果:


语句过滤器

上面说的是用过滤器过滤一个变量,下面来说一下如何在代码块中使用过滤器,上例子:

{% filter upper %}

    This text becomes uppercase

{% endfilter %}

运行效果:


is关键字进行变量判断

is关键字用来在表达式中测试变量的值是否满足某条件。比如判断变量是否是数字,就可以用

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

运行结果:


当我们修改一下代码,成下面的格式,限制输入为int:

@app.route("/tmpl/")

def renderTmpl(name=1):

       return render_template("hello.html",name=name)

再次运行:


Flask内置的is可用的函数参考:http://docs.jinkan.org/docs/jinja2/templates.html#builtin-tests

关注“挨踢学霸”同名公众号, 回复jinjia2-1获取源码下载地址。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,969评论 19 139
  • 声明:转载请注明出处http://www.jianshu.com/p/1664dcfd840c 最近在折腾Djan...
    蛇发女妖阅读 6,310评论 1 10
  • 第三章 模板 序 为什么要分离 易于维护的代码,关键在于保持简单的结构。而我们之前编写的hello.py虽然简单,...
    科幻经典阅读 1,558评论 0 6
  • 我看见故事的结局 我看见黎明的升起 我看见眼角的泪滴 要我选择一个时刻 看不真实的梦破碎 越早越好 不是朋友的不耽...
    翔于阅读 117评论 0 1
  • Words and expressions 1. Prelude 前奏曲;序幕 2. Unforeseen 意料之...
    Donutzpj阅读 259评论 0 0