Python HTML 的模板引擎 Jinja2

Python Jinja2 是一個用於生成動態 HTML 的模板引擎。它可以讓你在 HTML 中使用 Python 的語法和邏輯,從而實現數據和視圖的分離。本文將介紹 Python Jinja2 的基本用法和特性,以及一些實例和技巧。

安裝和導入

要使用 Python Jinja2,你需要先安裝它。你可以使用 pip 命令來安裝:

pip install Jinja2

安裝完成後,你可以在你的 Python 代碼中導入 jinja2 模塊:

from jinja2 import Template, Environment, FileSystemLoader

創建和渲染模板

要使用 Python Jinja2,你需要先創建一個模板文件,通常是以 .html 爲擴展名的文件。模板文件中可以包含 HTML 代碼,以及一些 Jinja2 的語法元素,如變量、過濾器、控制結構等。下面是一個簡單的模板文件的例子:

<html>
<head>
    <title>{{ title }}</title>
</head>
<body>
    <h1>{{ title }}</h1>
    <p>{{ content }}</p>
</body>
</html>

在這個模板文件中,我們使用了兩個變量:{{ title }} 和 {{ content }}。這些變量將在渲染模板時被替換爲實際的值。要渲染模板,我們需要在 Python 代碼中創建一個 Environment 對象,指定模板文件的路徑,然後使用 get_template 方法加載模板文件,最後使用 render 方法傳入變量的值,得到渲染後的 HTML 字符串。下面是一個渲染模板的例子:

# 創建一個 Environment 對象,指定模板文件的路徑
env = Environment(loader=FileSystemLoader('templates'))
# 加載模板文件
template = env.get_template('example.html')
# 渲染模板,傳入變量的值
html = template.render(title='Python Jinja2', content='This is a blog about Python Jinja2.')
# 打印渲染後的 HTML 字符串
print(html)

運行這段代碼,我們可以得到如下的輸出:

<html>
<head>
    <title>Python Jinja2</title>
</head>
<body>
    <h1>Python Jinja2</h1>
    <p>This is a blog about Python Jinja2.</p>
</body>
</html>

可以看到,模板中的變量已經被替換爲我們傳入的值。

使用過濾器

過濾器是一種可以對變量進行轉換或處理的功能。在模板中,我們可以使用 | 符號來應用過濾器。Jinja2 提供了很多內置的過濾器,例如 capitalize、lower、upper、title、trim、escape 等。我們也可以自定義過濾器。下面是一個使用過濾器的例子:

<html>
<head>
    <title>{{ title|title }}</title>
</head>
<body>
    <h1>{{ title|title }}</h1>
    <p>{{ content|trim|escape }}</p>
</body>
</html>

在這個例子中,我們對 title 變量應用了 title 過濾器,它會將每個單詞的首字母大寫。我們對 content 變量應用了 trim 和 escape 過濾器,它們會分別去除兩端的空白字符和轉義 HTML 特殊字符。如果我們傳入如下的值:

title = 'python jinja2'
content = '  This is a blog about <b>Python Jinja2</b>.  '

那麼渲染後的 HTML 字符串爲:

<html>
<head>
    <title>Python Jinja2</title>
</head>
<body>
    <h1>Python Jinja2</h1>
    <p>This is a blog about &lt;b&gt;Python Jinja2&lt;/b&gt;.</p>
</body>
</html>

使用控制結構

控制結構是一種可以實現條件判斷和循環遍歷的功能。在模板中,我們可以使用 {% … %} 符號來表示控制結構的開始和結束。Jinja2 支持的控制結構有 if、elif、else、for、endfor、endif 等。下面是一個使用控制結構的例子:

<html>
<head>
    <title>{{ title }}</title>
</head>
<body>
    <h1>{{ title }}</h1>
    <p>{{ content }}</p>
    {% if comments %}
    <ul>
        {% for comment in comments %}
        <li>{{ comment }}</li>
        {% endfor %}
    </ul>
    {% else %}
    <p>No comments.</p>
    {% endif %}
</body>
</html>

在這個例子中,我們使用了 if 和 for 語句來實現條件判斷和循環遍歷。如果我們傳入如下的值:

title = 'Python Jinja2'
content = 'This is a blog about Python Jinja2.'
comments = ['Great blog!', 'Very informative.', 'I learned a lot.']

那麼渲染後的 HTML 字符串爲:

<html>
<head>
    <title>Python Jinja2</title>
</head>
<body>
    <h1>Python Jinja2</h1>
    <p>This is a blog about Python Jinja2.</p>
    <ul>
        <li>Great blog!</li>
        <li>Very informative.</li>
        <li>I learned a lot.</li>
    </ul>
</body>
</html>

結語

Python Jinja2 是一個強大而靈活的模板引擎,它可以讓你在 HTML 中使用 Python 的語法和邏輯,從而實現數據和視圖的分離。本文只是介紹了 Python Jinja2 的基本用法和特性,還有很多高級功能和技巧沒有涉及,如繼承、宏、測試、過濾器等。如果你想了解更多關於 Python Jinja2 的內容,你可以參考官方文檔或其他相關資料。

: [Jinja — Jinja Documentation (3.0.x)] : [Python Jinja2 模板引擎教程 - 簡書] : [Builtin Filters — Jinja Documentation (3.0.x)] : [Custom Filters — Jinja Documentation (3.0.x)] : [Control Structures — Jinja Documentation (3.0.x)] : [Template Designer Documentation — Jinja Documentation (3.0.x)] : [Jinja Documentation (3.0.x)] : https://www.jianshu.com/p/9b4a9c5f4f6a : https://jinja.palletsprojects.com/en/3.0.x/templates/#builtin-filters : https://jinja.palletsprojects.com/en/3.0.x/api/#custom-filters : https://jinja.palletsprojects.com/en/3.0.x/templates/#control-structures : https://jinja.palletsprojects.com/en/3.0.x/templates/ : https://jinja.palletsprojects.com/en/3.0.x/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章