頁面模板 - LZerApp/crawlerenv GitHub Wiki
在 Flask 應用程式中會根據 HTTP 請求的 URL 在路由中尋找對應的函數,並將函數的執行結果進行返回;一般而言,在非前後端分離的架構下需要將完整的 HTML 程式碼返回,這樣的內容不應全以字串的資料型別寫於視圖函數之中,為了力求簡潔與方便維護,正確的作法是將絕大部分的內容單獨存放於獨立的檔案中,而視圖函數則只處理需要動態進行填寫的部分,藉此分離業務邏輯與表現邏輯。
上述的過程需要藉助模板引擎(template engine)來實現,在模板中透過指定的語法標示出需要動態填入的部分,再交由模板引擎渲染(render)出最後的結果,目前 Flask 框架預設使用的模板引擎為 Jinja2。
模板本身僅只是個純文字檔案,可以用於生成任何其他的純文字檔案如 HTML、XML、CSV、LaTeX 等,因此沒有特定的副檔名。一個簡單的模板如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<head>
<title>My Webpage</title>
</head>
<body>
<ul id="navigation">
{% for item in navigation %}
<li><a href="{{ item.href }}">{{ item.caption }}</a></li>
{% endfor %}
</ul>
<h1>My Webpage</h1>
{{ a_variable }}
</body>
</html>
模板中除了固定不變的純文字內容之外,可以包含 Python 變數與陳述式,此時需要使用特定的分隔符號進行標示以便渲染。常見的分隔符號有:
-
陳述式:
{% ... %}
用於 if 判斷式或 for 循環式… -
表達式:
{{ ... }}
用於變數表示、函數呼叫… -
註解區:
{# ... #}