Flask 是一個適用於 Python 的輕量級 Web 框架,可以輕鬆構建 Web 應用程式。
但是,這只是一個簡單的文字,如“Hello Flask!”。在實際應用中,您需要呈現的不僅僅是簡單的文字。您需要呈現 HTML 模板。
在 Flask 中,我們可以使用 Jinja 來實現這一功能。
Jinja
它的強大功能之一是使用 Jinja 模板引擎呈現 HTML 模板。
Jinja 模板是用您已經熟悉的普通 HTML 編寫的。但除此之外,您還可以使用特殊的語法來處理動態內容,例如從請求或其他程式碼源向模板傳遞資料。還可以使用迴圈和條件等控制結構。
讓我們來看看它的基本工作方式:
<!DOCTYPE html> <html> <head> <title>Welcome to Flask</title> </head> <body> {% if user.is_logged_in %} <p>Welcome back, {{ user.name }}!</p> {% else %} <p>Please log in to continue.</p> {% endif %} </body> </html>
它看起來像一個普通的 HTML 檔案,但正如我們所看到的,我們使用了一些特殊的語法,如 {{ }}
來插入變數,使用 {% %}
來新增迴圈和條件。
渲染模板
要渲染模板,我們需要將其放入 templates
目錄。
. |-- app.py |-- templates |-- about.html |-- index.html
然後,我們在 Python 應用程式檔案中使用 render_template
函式來渲染 HTML 模板。如果我們擴充套件上一篇文章中的相同程式碼,我們的程式碼現在看起來就像下面這樣:
from flask import Flask, render_template app = Flask(__name__) @app.route('/') def home(): return render_template('index.html') @app.route('/about') def about(): return render_template('about.html')
傳遞變數
在上述模板中,我們有 {{ name }}
和 {{ user.is_logged_in }}
變數。但是,我們還沒有向模板傳遞任何變數。
要向模板傳遞變數,我們可以將它們作為引數傳遞給 render_template
函式。
例如:
@app.route('/') def home(): return render_template('index.html', user={'is_logged_in': True, 'name': 'Joann'})
現在,當我們訪問主頁時,我們將看到“Welcome back, Joann!”資訊,而不是“Please log in to continue.”,因為 is_logged_in
設定為 True
。
模板繼承
Jinja 允許你使用模板繼承,這在多個頁面共享相同佈局或元件時非常有用。我們可以建立一個基礎模板,然後在其他模板中重複使用,而不是重複使用共同的元素。
在本示例中,我們有一個主頁和一個關於我們的頁面,它們共享相同的佈局,如 head
, title
和後面的一些樣式或指令碼。通過模板繼承,我們可以讓事情變得更簡單、更有條理。
首先,我們建立基礎檔案。命名為base.html
。然後,新增常用元素:
<!DOCTYPE html> <html> <head> <title>{% block title %}Welcome to Flask{% endblock %}</title> </head> <body> {% block content %}{% endblock %} </body> </html>
在此模板中有兩個區塊:一個用於標題,另一個用於內容。{% block %}
標籤允許子模板覆蓋基礎模板的特定部分。
現在,我們可以重寫 index.html
檔案來擴充套件 base.html
檔案。我們可以刪除 index.html
檔案中的所有基本 HTML 結構,如 head
和 title
標記,並用 extends
標記取而代之。
{% extends 'base.html' %} {% block title %}Welcome to Flask{% endblock %} {% block content %} {% if user.is_logged_in %} <p>Welcome back, {{ user.name }}!</p> {% else %} <p>Please log in to continue.</p> {% endif %} {% endblock %}
在“關於我們 ”頁面,我們也可以將其改寫如下:
{% extends 'base.html' %} {% block title %}About Us{% endblock %} {% block content %} <p>This is the about page.</p> {% endblock %}
當我們訪問主頁時,如果使用者已登入,就會看到資訊。而在關於頁面,我們會看到“This is the about page.”。這裡的區別在於,這兩個頁面都更簡潔,更易於維護,不需要重複程式碼。
小結
這就是我們如何使用 Jinja 在 Flask 中呈現 HTML 模板。Jinja 是一個功能強大的模板引擎,它提供了很多有用的功能和擴充套件,讓我們可以更輕鬆地用 Python 構建動態 Web 應用程式。
要探索的東西還有很多,但我希望這篇文章能為您提供一個使用 Flask 的堅實起點。
評論留言