笔记-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. JAVA中高访问量高并发的问题怎么解决?

    尽量使用缓存,包括用户缓存,信息缓存等,多花点内存来做缓存,可以大量减少与数据库的交互,提高性能. 用jprofiler等工具找出性能瓶颈,减少额外的开销. 优化数据库查询语句,减少直接使用hiber ...

  2. 将POST请求转换为DELETE、PUT等请求的方法

    一.在WEB工程的web.xml文件中配置HiddenHttpMethodFilter 二.form 表单中添加一个隐藏域 name="_method" value="D ...

  3. Cloud Tool 小探索

    Google Apps不用多说. Google drive免费提供15GB的容量. Microsoft Windows Live感觉功能上和google相比无亮点和优势. SkyDrive免费提供7G ...

  4. CF311E Biologist

    嘟嘟嘟 很显然是一道最小割模型. 做完几道题后.图的大概就能想出来了: 1.对于每一个动物,如果是0,就和s连一条边,否则向t连一条边. 2.对于每一个任务,题中要求最大利润,可以转化成最小损失. ( ...

  5. 如何在.Net Core 2.0 App中读取appsettings.json

    This is something that strangely doesn’t seem to be that well documented and took me a while to figu ...

  6. LeetCode18.四数之和 JavaScript

    给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满 ...

  7. 严重: A child container failed during start java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component

    自己写了个最简单的springMVC项目练练手,没有用maven,在WebContent中新建了lib文件夹,将jar包复制到这里面,然后add to build path到项目里. 启动Tomcat ...

  8. ObjC之RunTime(上)

    转载自这里. 最近看了一本书——iOS6 programming Pushing the Limits(亚马逊有中文版),最后一章是关于Deep ObjC的,主要内容是ObjC的runtime.虽然之 ...

  9. 基于jquery,ajax请求及自我终止的函数封装。

    场景描述: 在我们平时的开发过程中,经常会遇到这样的情况.在搜索功能中进行模糊搜索或者联想关联. 这就要我们每次对输入框中的数据进行改动时,都要发送一次请求.当在短时间内多次操作改动时,问题就出现了. ...

  10. css:文章标题过长时,使用省略号

    html代码 <ul> <li><a href="" target="_blank">我是文章1,现在标题过长,使用css加 ...