1. 程式人生 > >筆記-jinja2語法

筆記-jinja2語法

布爾 tag 數組下標 字符串處理函數 title webpage port 替換 算數

筆記-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語法