Mako هي مكتبة قوالب Python عالية الأداء تجمع بين سرعة التنفيذ وبناء الجملة المألوف لـ Python مع توريث القوالب.
بناء الجملة الأساسي والتعبيرات
Variable x: ${x}
Expression arithmetic: ${x + 1}
HTML-escaped filter: ${x | h}
URL-encoded filter: ${x | u}
Trimmed whitespace: ${x | trim}
هياكل التحكم
تبدأ عبارات التحكم بالعلامة % ويجب إنهاؤها بـ % endif، % endfor، إلخ:
% for user in users:
% if user.is_active:
<li>${user.name} (Active)</li>
% else:
<li>${user.name} (Inactive)</li>
% endif
% endfor
كود Python المضمن
كتل Python أثناء وقت العرض
<%
greeting = "Hello, " + user.name.upper()
total_score = sum(user.scores)
%>
<p>${greeting}: ${total_score}</p>
كتل Python على مستوى الوحدة (Module-Level)
تنفذ الوسم <%! ... %> مرة واحدة على مستوى الوحدة عند تحويل القالب إلى كود Python:
<%!
import datetime
def format_date(dt):
return dt.strftime("%Y-%m-%d")
%>
<p>Today: ${format_date(datetime.date.today())}</p>
الدوال والماكرو (<%def>) والكتل الخام
<%def name="render_card(title, body)">
<div class="card">
<h3>${title}</h3>
<p>${body}</p>
</div>
</%def>
${render_card("Feature", "Card body text")}
<%text filter="h">
This is a raw block where ${expressions are not evaluated}.
</%text>
<%doc>
Multi-line template comment
</%doc>
توريث القوالب (Template Inheritance)
القالب الأساسي (base.html)
<!doctype html>
<html>
<head>
<title><%block name="title">Default Title</%block></title>
</head>
<body>
<header><h1><%block name="header" /></h1></header>
<main>${self.body()}</main>
</body>
</html>
القالب الفرعي (child.html)
<%inherit file="base.html" />
<%block name="title">Page Title</%block>
<%block name="header">Welcome to my site</%block>
<p>هذا هو محتوى الجسم الرئيسي الذي يتم إدخاله في self.body().</p>
استخدام واجهة برمجة تطبيقات Python
from mako.template import Template
template = Template("Hello, ${name}!")
print(template.render(name="World"))