笔记-jinja2语法

原文链接: http://www.cnblogs.com/wodeboke-y/p/10740855.html

笔记-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循环。

    {% for user in users %}

  • {{ user.username|title }}
  • {% endfor %}

 

迭代字典

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

{{ key }}

{{ value}}

{% endfor %}

当然也可以加入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为例:

    {% block head %}

   

    {% block title %}{% endblock %} - My Webpage

    {% endblock %}

{% block content %}{% endblock %}

 

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

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

 

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

 

{% block head %}

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

   

{% endblock %}  

 

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

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

 

转载于:https://www.cnblogs.com/wodeboke-y/p/10740855.html

你可能感兴趣的:(笔记-jinja2语法)