笔记-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. TypeScript----类

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

  2. TraceWrite waittype

    今天上午突然开发人员叫起来说数据库非常慢,马上连上数据查看. 使用sp_who2和下面脚本可以看到大量的TraceWrite 等待事件.我的第一反应就是有人启用的Profiler在生产服务器上抓数据了 ...

  3. BZOJ1923:[SDOI2010]外星千足虫(高斯消元)

    Description Input 第一行是两个正整数 N, M. 接下来 M行,按顺序给出 Charles 这M次使用“点足机”的统计结果.每行 包含一个“01”串和一个数字,用一个空格隔开.“01 ...

  4. Codeforces Round #527 (Div. 3) F. Tree with Maximum Cost 【DFS换根 || 树形dp】

    传送门:http://codeforces.com/contest/1092/problem/F F. Tree with Maximum Cost time limit per test 2 sec ...

  5. PAT——1045. 快速排序

    著名的快速排序算法里有一个经典的划分过程:我们通常采用某种方法取一个元素作为主元,通过交换,把比主元小的元素放到它的左边,比主元大的元素放到它的右边. 给定划分后的N个互不相同的正整数的排列,请问有多 ...

  6. iOS 8及以后版本 如何创建UIAlertView?

    1. Important: UIAlertView is deprecated in iOS 8. (Note that UIAlertViewDelegate is also deprecated. ...

  7. 【SQLSERVER学习笔记】细节记录

    SQLSERVER 查询时,WHERE中使用<>时,不会把NULL值查出来. SQLSERVER子查询中不能使用 ORDER BY. SQLSERVER 使用DISTINCT时,必须把OR ...

  8. 【读书笔记】The Swift Programming Language (Swift 4.0.3)

    素材:Language Guide 初次接触 Swift,建议先看下 A Swift Tour,否则思维转换会很费力,容易卡死或钻牛角尖. 同样是每一章只总结3个自己认为最重要的点.这样挺好!强迫你去 ...

  9. const、let、var的主要区别

    接触ES6之后,以前定义变量的方式由var增加了let.const,平时看别人用也不知道如何区别具体差别,好好科普了一下记录下来,方便大家一起学习. var(大家最熟悉的定义方式) 1.可定义全局作用 ...

  10. React-Reflux 基础分享

    因工作需要使用 React + Reflux 开发,最近几天都在努力学习着,特别是 Reflux,在网上查找的许多资料和 github 上的文档年代都有点久远,JavaScript 按照目前的节奏,更 ...