Flask:靜態文件&模板(0.1)


Windows 10家庭中文版,Python 3.6.4,Flask 1.0.2

 

前面看了Flask的Quickstart文檔,可是,一直沒有練習里面的內容,這不,剛剛練習完畢,來寫篇博文記錄一下!

 

靜態文件

我的Flask項目時一個單獨的模塊,因此,要使用靜態文件,只需要在模塊所在目錄下建立static文件夾,然后把靜態文件放入其中。

Flask項目啟動后,使用“/static/”加上<文件名>就可以訪問靜態文件了。

/static/<文件名>

說明,在Quickstart文檔中,如果Flask項目是package的話,將static文件夾放到package的根目錄下。

我的測試是放了一個html文件進入,命名為static1.html,代碼如下:

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="utf-8">
 5         <title>Static Files Test</title>
 6     </head>
 7     <body>
 8         <h1>This is the first satic file of Flask.</h1>
 9     </body>
10 </html>

然后,啟動hello.py模塊:成功

訪問上面建立的靜態文件:成功

 

什么是靜態文件呢?CSS、JavaScript、圖片、音頻、視頻,甚至HTML文件都是……在我看來,只要放到static文件夾中,就是“靜態文件”。

當然,在Quickstart文檔介紹中,只提到了CSS、JavaScript文件。需要進行測試,並找更多資料來證明。

 

在Quickstart文檔中介紹的靜態文件的使用內置服務器僅適用於項目開發階段,在生產環境部署時,靜態文件是由Web服務器(比如Nginx)

處理、分發的。

 

很簡單、快捷,的確。

 

模板

為什么使用模板?將數據和視圖分離,分離之后,再使用模板引擎將兩者生成帶數據頁面(專業名詞叫 渲染(Render))返回給客戶端瀏覽器。

Flask的模板引起是 Jinja2。

Quickstart中介紹了一個render_template()函數來渲染模板,並將一個name變量渲染到了模板中,代碼如下:

1 return render_template('hello.html', name=name)

在hello.html中一定定義了變量{{ name }}。

 

模板文件放在哪里?

按照下面的說明創建templates文件夾,,

-項目是一個模塊,放到和模塊同一目錄下;

-項目是package,放到package的根目錄下;

然后,將模板文件放入templates文件夾即可。

說明,和前面介紹的static文件夾位置相同。

 

接下來,建立一個模板文件tmpt1.html進行測試,源碼如下:

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="utf-8">
 5         <title>Rendering Templates test</title>
 6     </head>
 7     <body>
 8         {{ name }}
 9     </body>
10 </html>

上面的模板文件僅僅定義了一個變量{{ name }}。

 

目前接觸的模板文件都是HTML文件,是否可以是其它文件呢?還需更多了解。

 

然后,在hello.py中編寫處理模板渲染的URL處理函數:

1 @app.route("/tmpt")
2 def tmptTest():
3     ctx = {}
4     ctx['name'] = 'Benjamin'
5     return render_template('tmpt1.html', **ctx)

 

啟動項目,訪問/tmpt鏈接:成功輸出處理函數中需要被渲染的數據

 

進一步測試: 在模板文件中添加處理函數中沒有的參數

前面的模板文件中添加了一個變量{{ name }},現在,再添加一個變量{{ yourname }},保持處理函數不變——仍然只提供一個name。

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="utf-8">
 5         <title>Rendering Templates test</title>
 6     </head>
 7     <body>
 8         {{ name }}<br />
 9         {{ yourname }}<br />
10     </body>
11 </html>

啟動項目,訪問頁面:頁面和之前一樣,不過,Chrome的控制台沒有報錯。

 

千萬注意,在更新模板文件后,一定要重啟項目!否則,新的模板文件是不會生效的!~經過測試,項目模塊文件更新后,也需要

重啟才會生效!~總之,只要有改動,那邊重啟項目!

 

下面是更新后的項目模塊文件,及重啟后訪問到的頁面:顯示了name、yourname變量的內容。

 

測試模板是遇到的錯誤:

在第一次使用render_template()函數時,將字典參數ctx直接寫進入,然后啟動得到如下錯誤:

提示我render_template()函數只有一個位置參數,而我給了兩個!那么,我用錯了!

查看render_template()函數的文檔得知,的確只有一個位置參數,然后是關鍵詞參數:

然后,給我的字典參數ctx加上兩顆星號,問題就解決了。

 

看來,自己對Python函數的各種參數還是不太熟悉啊!位置參數、默認值參數、關鍵詞參數~~

 

為什么會發生此錯誤?

一是由於沒有細查,二是因為前面使用Django的渲染函數時傳入的參數是一個字典的影響。

 

至此,本次測試完畢。

 

更多關於這方面的內容,還得查看官方文檔才是。

 

參考鏈接:

Quickstart之Static Files

Quickstart之Rendering Templates

render_template()使用說明

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM