اذهب إلى المحتوى

مكتبات القوالب template libraries المستعملة في بايثون


Heidi Melhem

محركات قوالب بايثون templating engine هي أدوات قوية للغاية تساعد المطورين على بناء تطبيقات ويب وأنظمة إدارة محتوى كاملة وإنشاء تقارير ورسوم بيانية من مجموعة بيانات، ولا ينحصر استخدامها في مشاريع معقدة بل يمكن الاستفادة منها في مشاريع بسيطة أيضًا، لذا إن كنت تعمل على مشروع بايثون Python يحتاج إلى محرك قوالب لإنشاء صفحات HTML تلقائيًا، سيساعدك هذا المقال ببساطة على اختيار المكتبة الأنسب لك.

نُشر استبيان يتضمن السؤال التالي:

اقتباس

"ما مكتبة قوالب بايثون التي تفضل استخدامها؟"

وصلت الإجابات إلى 1644 إجابة وتظهر التفاصيل كما يلي:

مكتبة بايثون

وأشار شخص ما إلى تجربته مع مكتبات قوالب بايثون بتوفير وقت كبير بأتمتة بعض أعماله التي كانت تتطلب قضاء الكثير من الوقت بالاعتماد على النسخ واللصق من عدة مصادر وعرضها في في صفحة واحدة بنموذج موحد وهذه العملية كما ذكر تأخذ وقتًا كبيرًا ومعرضة للخطأ.

أهمية القوالب ومحرك القوالب templating engine

سنوضح فكرة القوالب من خلال الاستعانة بمثال لشخص يرغب بإنشاء صفحة صغيرة تتضمن جميع مقالات بايثون التي كتب عنها مؤخرًا والشيفرة كالتالي:

<html>
  <head>
    <title>My Python articles</title>
  </head>
  <body>
    <p>These are some of the things I have written about Python:</p>
    <ul>
      <li>Python GUIs</li>
      <li>Python IDEs</li>
      <li>Python web scrapers</li>
    </ul>
  </body>
</html>

تعتبر هذه الشيفرة كافية لعدد محدود من المقالات، ولكن عندما يرغب الكاتب بإجراء تعديل مثل إضافة مقال آخر أو عدد كبير من المقالات الإضافية سيحتاج لكتابة شيفرة هذه الصفحة يدويًا والذي يعد نشاطًا مُرهقًا ومضيعة للوقت.

يمكن بدلًا من ذلك إنشاؤها من ملف CSV أو ملف بيانات آخر يحتوي على قائمة بجميع الصفحات التي يرغب بإضافتها، ثم إنشاء نسخ مكررة من هذا بسهولة مع إمكانية إجراء تغييرات عديدة مثل عنوان الملف أو عنوان الصفحة أو أجزاء من النص أو النص بالكامل، وتتم كل هذه العمليات برمجيًا وذلك باستخدام محرك القوالب.

محركات القوالب المستخدمة في بايثون

تتوفر خيارات عديدة وتختلف كل أداة من أدوات القوالب قليلًا عن الأخرى وينبغي قراءة التوثيق لفهم الاستخدام الدقيق لها، وسنذكر ثلاثة منها دون تفضيل إحداها عن الأخرى وهي:

أداة Mako

تتميز أداة القوالب Mako بالقوة والبساطة وسهولة الاستخدام حيث تتيح تصميم القوالب باستخدام عدد قليل فقط من التعليمات البرمجية.

تعتبر غنية بالميزات مثل وجود المرشحات filters والوراثة والكتل القابلة للاستدعاء ونظام التخزين المؤقت المدمج، ويمكن تضمين جميع هذه الميزات في مشاريع الويب الضخمة أو المعقدة، ولها توثيق جيد، كما أنها تتميز بسرعة أدائها على عكس Jinja2.

تعد Mako لغة القوالب الافتراضية لأطر الويب مثل Pyramid و Pylons واستخدمت في موقع Reddit لعرض صفحات الويب الخاصة به، وتدعم كلاً من الإصدار 2 والإصدار 3 من بايثون، وتم إصدارها بموجب ترخيص MIT.

Jinja2

يعد Jinja2 خيارًا آخر سريع وغني بالميزات، فهو متاح لكل من الإصدار 2 والإصدار 3 من بايثون بموجب ترخيص BSD، ويستخدمه كل من Mozilla و SourceForge و NPR و Instagram وغيرها لامتلاكه مزايا عديدة.

من مزاياه خاصية تهريب وسوم HTML ووضع الحماية sandboxing ووراثة القالب والقدرة على تطبيق وضع الحماية على أجزاء فقط من القوالب، بالإضافة إلى تجميع القوالب الخاصة بالمستخدم إلى شيفرة محمولة bytecode، كما يمتلك توثيقًا قويًا.

يستخدم Jinja2 تركيب الجملة الخاص به على عكس Mako الذي يجعل القوالب الخاصة بك تستخدم منطق لغة بايثون البرمجي، ومع ذلك يتشابه Jinja2 مع Mako بالكثير من المزايا، أما تفضيل أحدهما على الآخر يكون تبعًا لنمط التنسيق الذي يفضله المستخدم.

Genshi

يعتبر Genshi أداة XML ذات محرك قوالب قوي مناسبة للعمل مع بيانات بتنسيق XML أو HTML (والذي هو نوع من XML أصلًا)، كما تتيح العمل بتنسيقات مغايرة لتنسيق صفحة الويب، يتوفر Genshi بموجب ترخيص BSD ويدعم الإصدار 2 والإصدار 3 من بايثون.

مثال على استخدام مكتبة قوالب

لنعيد صياغة المثال السابق، فبدلًا من تحديث ملف HTML في كل مرة يكتب فيها عن موضوع جديد يمكن تحديثه برمجيًا، ويكون النموذج كالتالي:

<html>
  <head>
    <title>My Python articles</title>
  </head>
  <body>
    <p>These are some of the things I have written about Python:</p>
    <ul>
      %for topic in topics:
      <li>${topic}</li>
      %endfor
    </ul>
  </body>
</html>

وبعد ذلك يمكن تكرار كل موضوع من خلال مكتبة القوالب المستخدمة وهي Mako في هذا المثال:

from mako.template import Template

mytemplate = Template(filename='template.txt')
print(mytemplate.render(topics=("Python GUIs","Python IDEs","Python web scrapers")))

وبالطبع لا يتم في الواقع سرد المحتويات يدويًا في متغير بل يتم سحبها من مصدر بيانات خارجي مثل قاعدة بيانات أو واجهة برمجة تطبيقات.

يوجد الكثير من خيارات محركات قوالب بايثون المُساعدة على إنشاء النماذج في مختلف أنواع المشاريع، لذا يمكن الاطلاع على القائمة الكاملة من توثيق Python wiki الرسمي واختيار المناسب منها ولكن عمومًا فقد ذكرنا لك أشهر مكتبات القوالب استخدامًا والتي سيكون اختيارك غالبًا محصورًا ضمنها.

ترجمة -وبتصرف- للمقال 3 Python template libraries compared لصاحبه Jason Baker.

اقرأ أيضًا


تفاعل الأعضاء

أفضل التعليقات

لا توجد أية تعليقات بعد



انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أضف تعليق

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • أضف...