Python Jinja2使用方法

2021-10-16 04:26:33 字數 1613 閱讀 1531

一、 作為乙個模板語言,它的主要優勢是可以省去很多重複的前端**,用類似於後台迴圈**等方式來產生html,首先,需要讀入乙個帶有模板語言的html 模板,類似於如下:

}

}}}}

其中, 以包裹的為模板語句,語法和python神似,只有些許不同,詳見jinja2官方文件(過濾器等),以} 包裹的為變數引用,會被jinja2解析為乙個變數,即動態變化的資料。

二、載入模板

有了上述的html模板,後台利用如下**讀入。

import jinja2

env = jinja2.environment(loader=jinja2.filesystemloader(path))

temp = env.get_template('statics/template.html')

注意一點: 其中path需要為當前python檔案所在目錄的完整路徑,get_template內部的引數為html模板相對於該python檔案所在目錄的路徑(相對路徑)。

三、模擬資料,對模板進行render

通過第一部分的html模板中我們不難發現該模板一共需要三個變數,content、 array_table_head 以及 dict_table_data。所以我們需要在後台對這三個變數進行模擬。

1. 型別分析。需要注意的是,變數的型別一定要把控好,從模板的觀察可以看出content是直接用}包裹來引用的,所以在後台應該是一種可以直接取值的型別,例如str, int等。而array_table_head是通過遍歷來引用的,說明最外層在後台是乙個list或tuple等可遍歷物件,其次在內層是直接取值的,所以後台應該是乙個簡單的str或者int的列表。同理,對於dict_table_data, 則是乙個字典字串,所以三個變數的模擬應該如下:

render_dict = {}

dict_table_data = [,,,

]render_dict.update()

2. 模板渲染

最後一步,即通過render方法將變數放入模板中,然後生成新的html寫入檔案,此時,模板語言將會全部被轉化為html。

temp_out = temp.render(content=render_dict['content'], 

array_table_head=render_dict['array_table_head'],

dict_table_data=render_dict['dict_table_data'])

with open(os.path.join(path, 'statics/out.html'), 'w', encoding='utf-8') as f:

f.writelines(temp_out)

f.close()

四、總結

jinja2 對於html資料渲染有奇效,同時還具有許多優點:

(1)安全: 強大的 html 自動轉義系統保護系統免受 xss攻擊。

(2)編譯快速: 及時編譯最優的 python **。

(3)易於除錯。異常的行數直接指向模板中的對應行。

(4)具有模板繼承的特性,減少大量的工作量。

九 2 方法的使用 二

一 掌握有引數無返回值方法的呼叫 1 有時方法的執行需要依賴某些條件,就像生活中我們做一件事情時,也許需要前提條件,而方法的引數就需要前提條件,下圖示例為帶引數沒有返回值的方法 呼叫帶參方法與呼叫無參方法的語法類似,但在呼叫時必須傳入實際的引數值。2 不能忽視的問題 2.1 呼叫帶參方法時,必須保證...

tar gz bz bz2 等各種解壓檔案使用方法

tar 解包 tar xvf filename.tar 打包 tar cvf filename.tar dirname 注 tar是打包,不是壓縮!gz 解壓 1 gunzip filename.gz 解壓2 gzip d filename.gz 壓縮 gzip filename tar.gz 和 ...

dbms output put line使用方法

begin dbms output.put line a end 如果你是再sql plus中,只要再環境中打出 set serveroutput on 就可以了.還有一種方法 就是使用環境中的繫結變數也可以.再環境中定義 variable name varchar2 50 然後把過程新增乙個out...