Python | Jinja2 と f文字列 比較した実務上の使い分け

Python
スポンサーリンク

では、複数の商品をループで表示する「レシート風HTML」を Jinja2 で書いたサンプルを紹介します。これでテンプレートエンジンの強み(繰り返し処理や変数展開)がよく分かります。


Python側コード

from jinja2 import Template

# HTMLテンプレート(商品リストをループ表示)
template_str = """
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>レシート</title>
</head>
<body>
    <h1>ご購入明細</h1>
    <ul>
    {% for item in items %}
        <li>{{ item.name }}: {{ "{:,.0f}".format(item.price) }} 円</li>
    {% endfor %}
    </ul>
    <p><strong>合計: {{ "{:,.0f}".format(total) }} 円</strong></p>
</body>
</html>
"""

# サンプルデータ
items = [
    {"name": "りんご", "price": 120},
    {"name": "みかん", "price": 300},
    {"name": "バナナ", "price": 250},
]

# 合計計算
total = sum(item["price"] for item in items)

# テンプレートをレンダリング
template = Template(template_str)
html_output = template.render(items=items, total=total)

print(html_output)
Python

出力されるHTML(例)

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>レシート</title>
</head>
<body>
    <h1>ご購入明細</h1>
    <ul>
        <li>りんご: 120 円</li>
        <li>みかん: 300 円</li>
        <li>バナナ: 250 円</li>
    </ul>
    <p><strong>合計: 670 円</strong></p>
</body>
</html>
HTML

💡 ポイント

  • {% for item in items %} で商品リストをループ処理。
  • {{ "{:,.0f}".format(item.price) }} で桁区切りやフォーマットを指定。
  • データ(items, total)はPython側で計算してテンプレートに渡す。

これをさらに発展させて「日付や店舗名をヘッダーに表示する」などにすると、実際のレシートや請求書に近づきます。

タイトルとURLをコピーしました