در Flask، قالبها توسط موتور Jinja2 رندر میشوند. Jinja2 یک موتور قالبسازی قدرتمند برای Python است که به شما اجازه میدهد HTML داینامیک ایجاد کنید، دادهها را از پایتون پاس دهید و عملیات منطقی ساده روی قالب انجام دهید.
تواناییهای Jinja2 در Flask
- تزریق متغیرها: نمایش مقادیر پاس داده شده از Flask با استفاده از {{ variable }}.
- حلقهها (Loops): تکرار روی لیستها یا دیکشنریها با {% for item in list %} ... {% endfor %}.
- شرطها (Conditions): نمایش محتوای مختلف با {% if condition %} ... {% elif %} ... {% else %} ... {% endif %}.
- فیلترها (Filters): تغییر شکل دادهها قبل از نمایش، مثل {{ name|upper }} یا {{ price|round(2) }}.
- توابع و ماکروها (Macros): تعریف بلوکهای قابل استفاده مجدد در قالبها.
- وراثت قالب (Template Inheritance): ساختار صفحات مشابه با استفاده از {% extends "base.html" %} و {% block content %} ... {% endblock %}.
- وارد کردن فایلها (Include): استفاده از {% include "header.html" %} برای افزودن بخشهای مشترک.
نمونه استفاده از Jinja2
<!-- templates/index.html -->
<!DOCTYPE html>
<html lang="fa">
<head>
<meta charset="UTF-8">
<title>صفحه نمونه</title>
</head>
<body>
<h1>سلام {{ user }}!</h1>
{% if age >= 18 %}
<p>شما بزرگسال هستید.</p>
{% else %}
<p>شما کودک هستید.</p>
{% endif %}
<h2>رنگها:</h2>
<ul>
{% for color in colors %}
<li>{{ color|capitalize }}</li>
{% endfor %}
</ul>
</body>
</html>
در این مثال:
- با
{{ user }}نام کاربر نمایش داده میشود. - با شرط
{% if %}بررسی میکنیم که سن بزرگسال است یا خیر. - با حلقه
{% for %}روی لیست رنگها تکرار کرده و از فیلتر|capitalizeبرای بزرگ کردن حرف اول استفاده میکنیم.
به این ترتیب Jinja2 به شما انعطاف و قدرت میدهد تا صفحات HTML داینامیک با منطق ساده بسازید و محتوای Python را به راحتی به قالبها پاس دهید.