إنشاء القوالب على الخادم: Jinja2 وHandlebars
استخدام محركات القوالب لعرض HTML ديناميكيًا على الخادم
إنشاء القوالب على الخادم: Jinja2 وHandlebars درس مجاني في HTML Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في HTML Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة HTML Academy 4 دروس في المجموع.
لماذا تستخدم القوالب من جانب الخادم؟
تنشئ القوالب من جانب الخادم HTML على الخادم قبل إرساله إلى المتصفح. وهي توفر ترميزًا ملائمًا لتحسين محركات البحث منذ أول بايت، وتعمل دون JavaScript، وتتجنب مشكلة "الصفحة الفارغة حتى تحميل JS" التي تظهر في العرض من جانب العميل فقط.
Jinja2 (Python)
تُعد Jinja2 مكتبة إنشاء القوالب المعتمدة فعليًا في Python، وتستخدمها Flask وDjango (عبر الواجهة المضمّنة أو الواجهة الخلفية لـ jinja2) وPelican وmkdocs. يوضع المنطق داخل وسوم {% %}، والتعبيرات داخل {{ }}: استخدم <h1>{{ title }}</h1> للمتغيرات، و{% for item in items %} للحلقات.
<ul>
{% for item in items %}
<li>{{ item.name }} — ${{ item.price }}</li>
{% endfor %}
</ul>Handlebars (JavaScript)
تُعد Handlebars مكتبة إنشاء القوالب الأكثر استخدامًا في Node.js، وتشتهر برسائل البريد الإلكتروني الخاصة بالمعاملات، مثل SendGrid وMailgun، وبالعرض من جانب الخادم عبر Express. توضع التعبيرات داخل {{ }}، وتُنشأ الكتل عبر {{# }}: {{#each items}}<li>{{name}}</li>{{/each}}.
<ul>
{{#each items}}
<li>{{name}} — ${{price}}</li>
{{/each}}
</ul>الهروب التلقائي
يجري كلا المحركين عملية الهروب التلقائي لمخرجات المتغيرات افتراضيًا؛ فالقيمة {{ user.name }} عندما يكون name = "<script>" تنتج "<script>"، مما يحيد هجوم XSS. اعتمد دائمًا على الهروب التلقائي، ولا تستخدم المرشح الصريح للمحتوى الخام (Jinja: {{ x|safe }}، وHandlebars: {{{x}}}) إلا مع HTML موثوق.
توريث القوالب
في Jinja: تُستخدم {% extends "base.html" %} في القالب الابن، مع {% block content %}{% endblock %} في القالب الأساسي. وفي Handlebars: تُستخدم {{#> layout }}{{/layout}} مع كتل جزئية. يتيح ذلك لتخطيط أساسي تعريف البنية مرة واحدة، بينما تملأ الصفحات المناطق المتغيرة.
التضمينات والقوالب الجزئية
في Jinja: {% include "header.html" %}. وفي Handlebars: {{> header}}. كلاهما يضمّن قالبًا آخر داخل القالب الحالي. وتُعد القوالب الجزئية اللبنات الأساسية لمكتبات المكوّنات الكبيرة؛ إذ تُركّب داخل الصفحات والتخطيطات.
المرشحات والمساعدات
مرشحات Jinja: {{ price|currency }}. مساعدات Handlebars: {{currency price}}. يتيح كلاهما استدعاء دوال التنسيق على القيم. ويمكن تعريف مرشحات ومساعدات خاصة للتحويلات المتعلقة بالمشروع، مثل تنسيق التاريخ، والتعامل مع صيغ الجمع، وإنشاء الروابط.
الشروط
في Jinja: {% if user.is_logged_in %}Welcome{% else %}Sign in{% endif %}. وفي Handlebars: {{#if user.isLoggedIn}}Welcome{{else}}Sign in{{/if}}. يمكن تفريع القوالب استنادًا إلى البيانات من دون اللجوء إلى JavaScript في جهة العميل لإخفاء المحتوى أو عرضه.
الأداء
يُجري كلا المحركين ترجمة مسبقة للقوالب إلى دوال، ثم يستدعيان تلك الدوال مع كل طلب. تحدث الترجمة مرة واحدة، بينما يكون التصيير سريعًا. وفي المواقع ذات عدد الزيارات الضخم، يُفضّل تخزين المحتوى المصيّر مؤقتًا عند الحافة باستخدام Varnish أو Cloudflare بدلًا من إعادة تصيير الصفحات المتطابقة.
التوطين
يمكن دمج القوالب مع مكتبات i18n، مثل Jinja2 + Babel في Python، وHandlebars + i18next في Node. تحتوي القوالب على مفاتيح الترجمة مثل {{ t "welcome" }}، بينما تحل طبقة i18n هذه المفاتيح إلى اللغة المناسبة. وبذلك يمكن لقالب واحد التصيير بلغات متعددة.
قوالب أطر العمل
تأتي أطر العمل الحديثة بتنسيقات القوالب الخاصة بها: ERB في Rails، وTwig في Symfony، وBlade في Laravel، وRazor في .NET، وSlim/Haml للتنسيق الأكثر اختصارًا. الأنماط واحدة، لكن الصياغة تختلف. اختاروا المحرك الذي ينسجم مع لغة الواجهة الخلفية والنظام البيئي المستخدمين.
الانتقال نحو المكوّنات
تعمل القوالب بكفاءة كبيرة مع المواقع التقليدية المصيّرة على الخادم. أما التطبيقات الأكثر تفاعلية، فتجعل أطر مثل Next.js (React) وNuxt (Vue) وSvelteKit الحد الفاصل أقل وضوحًا؛ إذ تصيّر القوالب على الخادم، ثم تُجرى إماهة المكوّنات نفسها على العميل لإتاحة التفاعل.
اختبار المعرفة
لماذا يُعد الإفلات التلقائي السلوك الافتراضي في محركات القوالب مثل Jinja2 وHandlebars؟
الخلاصة
تولّد محركات القوالب في جهة الخادم، مثل Jinja2 في Python وHandlebars في JS وERB/Twig/Blade في حزم تقنية أخرى، HTML على الخادم باستخدام المتغيرات والحلقات والشروط والقوالب الجزئية والتوريث. يحمي الإفلات التلقائي من XSS افتراضيًا. ويمكن دمجها مع مكتبات i18n لإنشاء مواقع متعددة اللغات. القوالب هي الأساس، بينما تضيف أطر العمل الحديثة الإماهة فوقها.
الأسئلة الشائعة
هل درس «إنشاء القوالب على الخادم: Jinja2 وHandlebars» مجاني؟
نعم — نص درس «إنشاء القوالب على الخادم: Jinja2 وHandlebars» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة HTML Academy، انتقل إلى CoddyKit PRO. تتضمن دورة HTML Academy 4 دروس في المجموع.
ماذا ستتعلم في «إنشاء القوالب على الخادم: Jinja2 وHandlebars»؟
استخدام محركات القوالب لعرض HTML ديناميكيًا على الخادم تتمرن على HTML Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ HTML Academy؟
لا تُشترط خبرة سابقة. HTML Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «إنشاء القوالب على الخادم: Jinja2 وHandlebars»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس HTML Academy هذا؟
نعم. كل درس في HTML Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- استخراج المكونات والقوالب الجزئية
- إنشاء القوالب على الخادم: Jinja2 وHandlebars
- HTML في أنظمة التصميم
- دمج التوثيق ودليل الأنماط