笔记-jinja2语法

1.      基本语法

控制结构 {% %}

变量取值 {{ }}

注释 {# #}

2.      变量

最常用的是变量,由Flask渲染模板时传过来,比如上例中的”name”,也可以是任意一种Python基础类型,比如字符串{{ “Hello” }},用引号括起;或者数值,列表,元祖,字典,布尔值。直接显示基础类型没啥意义,一般配合其他表达式一起用

运算。包括算数运算,如{{ 2 + 3 }};比较运算,如{{ 2 > 1 }};逻辑运算,如{{ False and True }}

过滤器“|”和测试器“is”。这个在后面会介绍

函数调用,如{{ current_time() }};数组下标操作,如{{ arr[1] }}

“in”操作符,如{{ 1 in [1,2,3] }}

字符串连接符”~”,作用同Python中的”+”一样,如{{ “Hello ” ~ name ~ “!” }}

“if”关键字,如{{ ‘Hi, %s’ % name if name }}。这里的”if”不是条件控制语句。

在模板中,我们可以使用“.”获取变量的属性

user = { 'username' : 'shansan',  'bio': '我佛了',}

如果user为传入模板中的字典变量,可通过"."获取它的键值。
user.username等价于user['username']

可以用set标签在模板中定义变量

{% set navigation =
[('/','Home'),('/about','关于我')] %}

3.     
过滤器

变量可以通过“过滤器”进行修改,过滤器可以理解为是jinja2里面的内置函数和字符串处理函数。

常用的过滤器:

safe 渲染时值不转义

capitialize    
把值的首字母转换成大写,其他子母转换为小写

lower   把值转换成小写形式

upper   把值转换成大写形式

title      把值中每个单词的首字母都转换成大写

trim      把值的首尾空格去掉

striptags      渲染之前把值中所有的HTML标签都删掉

join        拼接多个值为字符串

replace 替换字符串的值

round   默认对数字进行四舍五入,也可以用参数进行控制

int  把值转换成整型

  那么如何使用这些过滤器呢? 只需要在变量后面使用管道(|)分割,多个过滤器可以链式调用,前一个过滤器的输出会作为后一个过滤器的输入。

{{ 'abc' | captialize  }}

# Abc

{{ 'abc' | upper 
}}

# ABC

{{ 'hello world' | title  }}

# Hello World

{{ "hello world" |
replace('world','daxin') | upper }}

# HELLO DAXIN

{{ 18.18 | round | int }}

# 18

4.     
控制结构

if语句类:

{% if daxin.safe %}

daxin is safe.

{% elif daxin.dead %}

daxin is dead

{% else %}

daxin is okay

{% endif %}

5.     
jinja2的for循环

for循环用于迭代Python的数据类型,包括列表,元组和字典。在jinja2中不存在while循环。

<ul>

{% for user in users %}

<li>{{ user.username|title }}</li>

{% endfor %}

</ul>

迭代字典

<dl>

{% for key, value in my_dict.iteritems() %}

<dt>{{ key }}</dt>

<dd>{{ value}}</dd>

{% endfor %}

</dl>

当然也可以加入else语句,在循环正确执行完毕后,执行

在for循环中,jinja2还提供了一些特殊的变量,用以来获取当前的遍历状态:

loop.index    当前迭代的索引(从1开始)

loop.index0  当前迭代的索引(从0开始)

loop.first       是否是第一次迭代,返回bool

loop.last 是否是最后一次迭代,返回bool

loop.length   序列中的项目数量

loop.revindex      到循环结束的次数(从1开始)

loop.revindex0    到循环结束的次数(从0开始)

6.     
继承

模板继承允许创建一个基本(骨架)文件,其他文件从该骨架文件继承,然后针对自己需要的地方进行修改。

jinja2的骨架文件中,利用block关键字表示其包涵的内容可以进行修改。

以下面的骨架文件base.html为例:

<!DOCTYPE html>

<html lang="en">

<head>

{% block
head %}

<link
rel="stylesheet" href="style.css"/>

<title>{% block title %}{% endblock %} - My Webpage</title>

{%
endblock %}

</head>

<body>

<div id="content">{% block content
%}{% endblock %}</div>

<div id="footer">

{%
block  footer %}

<script>This is javascript code </script>

{% endblock
%}

</div>

</body>

</html>

这里定义了四处 block,即:head,title,content,footer。

{% extend "base.html" %}       # 继承base.html文件

{% block title %} Dachenzi {% endblock %}   # 定制title部分的内容

{% block head %}

{{  super() 
}}        # 用于获取原有的信息

<style
type='text/css'>

.important { color: #FFFFFF }

</style>

{% endblock %}

# 其他不修改的原封不同的继承

PS: super()函数 表示获取block块中定义的原来的内容。

笔记-jinja2语法的更多相关文章

  1. Flask 的 template模板 与 jinja2语法

    Flask 的 template模板 与 jinja2语法 Flask使用的是Jinja2模板,所以其语法和Django基本无差别 1.模板基本数据的渲染 变量 {{..}} 列表 {% for it ...

  2. Flask入门模板Jinja2语法与函数(四)

    1 模板的创建 模板文件结构: project/ templates/ 模板文件 跳转模板一般使用: from flask import render_template,render_template ...

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

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

  4. Jinja2语法自动补全配置

    Jinja2语法自动补全配置 说明 在使用Pycharm社区版进行Web开发时,Jiaja2的语法是不会自动提示补全的,为了提高开发效率,需要根据个人习惯进行一些常用语法的自动补全配置,具体如下. 配 ...

  5. 《Java笔记——基础语法》

    Java笔记--基础语法       一.字符串的拼接: 例如: System.out.println(""+"");     二.换行语句: 例如: Syst ...

  6. Hive笔记--sql语法详解及JavaAPI

    Hive SQL 语法详解:http://blog.csdn.net/hguisu/article/details/7256833Hive SQL 学习笔记(常用):http://blog.sina. ...

  7. 读书笔记(06) - 语法基础 - JavaScript高级程序设计

    写在开头 本篇是小红书笔记的第六篇,也许你会奇怪第六篇笔记才写语法基础,笔者是不是穿越了. 答案当然是没有,笔者在此分享自己的阅读心得,不少人翻书都是从头开始,结果永远就只在前几章. 对此,笔者换了随 ...

  8. Javascript DOM 编程艺术(第二版)读书笔记——基本语法

    Javascript DOM 编程艺术(第二版),英Jeremy Keith.加Jeffrey Sambells著,杨涛.王建桥等译,人民邮电出版社. 学到这的时候,我发现一个问题:学习过程中,相当一 ...

  9. Jinja2语法小记

    jinja2模板语法小记 Jinja2模板中文文档 三种常见界定符 表达式 {{ ... }} 用于装载字符串.变量.函数调用等 语句 {% ... %} 用于装载控制语句,比如if判断.for循环等 ...

随机推荐

  1. php 汉字转拼音函数

    function Pinyin($_String, $_Code='UTF8'){ //GBK页面可改为gb2312,其他随意填写为UTF8 $_DataKey = "a|ai|an|ang ...

  2. LINUX基础了解

  3. CopyOnWriteArrayList对比ArrayList

    ArrayList非线程安全,CopyOnWriteArrayList线程安全 ArrayList添加元素的时候内部会预先分配存储空间,CopyOnWriteArrayList每次添加元素都会重新co ...

  4. PHP面向对象(OOP)编程入门教程链接

    PHP官方学习OOP: http://php.net/manual/zh/oop5.intro.php 从其他博主学习:(以下链接来源: http://blog.snsgou.com/post-41. ...

  5. TypeScript----类

    一.类的属性 public: 公有, private: 私有,不能在声明它的类的外部访问,只能在类内部访问 protect: 保护,不能在声明它的类的外部访问,但继承者除外 readonly 只读属性 ...

  6. 【HAOI2010】工厂选址题解

    题目描述 某地区有m座煤矿,其中第i号矿每年产量为ai吨,现有火力发电厂一个,每年需用煤b吨,每年运行的固定费用(包括折旧费,不包括煤的运费)为h元,每吨原煤从第i号矿运到原有发电厂的运费为Ci0(i ...

  7. 3spring:生命周期,属性赋值,自动装配

    有不懂的可以参考之前的文章! https://www.cnblogs.com/Mrchengs/p/10109053.html 1.Bean的生命周期     创建---初始化---销毁   容器管理 ...

  8. WIN10下的Docker安装

    1.什么是Docker Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱 ...

  9. PAT——1005. 继续(3n+1)猜想 (25)

    卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数.例如对n=3进行验证的时候, ...

  10. 【洛谷P2022】有趣的数

    有趣的数 题目链接 首先求出1~k中有多少个在k前面的数的个数,若>m,则无解 比如12345,从第一位开始, 1 0~1 共2个 1-0+1 12  10~12共3个    12-10+1 1 ...