في وظيفتي اليومية ، أقضي الكثير من الوقت في تبادل البيانات من مصادر مختلفة إلى معلومات يمكن قراءتها على البشر. في حين أن الكثير من الوقت هذا يأخذ فقط شكل جدول أو نوع من الرسم البياني أو غيرها من التصور البيانات ، وهناك أوقات أخرى عندما يكون من المنطقي لتقديم البيانات بدلا من ذلك في شكل مكتوب.
الصورة عن طريق:
Mennonite Church USA Archives . تم التعديل بواسطة Opensource.com. CC BY-SA 4.0
المزيد من موارد بايثون
ما هي بايثون؟
أعلى بيثون IDEs
أعلى الأطر بيثون واجهة المستخدم الرسومية
أحدث محتوى بيثون
المزيد من موارد المطورين
لكن حيوان أليف من الحيوانات الأليفة هو نسخ ولصق. إذا كنت تقوم بنقل البيانات من مصدرها إلى قالب قياسي ، فيجب ألا تقوم بالنسخ واللصق أيضًا. انها عرضة للخطأ ، وبصراحة ، انها ليست جيدة من وقتك.
لذلك بالنسبة لأي معلومة أبعثها بانتظام والتي تتبع نمطًا شائعًا ، أميل إلى إيجاد طريقة لأتمتة جزء منها على الأقل. ربما يتضمن ذلك إنشاء عدد قليل من الصيغ في جدول بيانات ، أو نص برمجي شيل سريع ، أو حل آخر لتهيئة القالب تلقائيًا بمعلومات تم سحبها من مصدر خارجي.
ولكن في الآونة الأخيرة ، كنت أستكشف تماثيل بايثون للقيام بالكثير من أعمال إنشاء التقارير والرسوم البيانية من مجموعات البيانات الأخرى.
تعتبر محركات بايثون للتزجيج قوية للغاية. إن حالة الاستخدام الخاصة بتبسيط عملية إنشاء التقرير لا تؤدي إلا إلى خدش سطح الأشياء التي يمكن استخدامها من أجلها. يستفيد العديد من المطورين من هذه الأدوات لإنشاء تطبيقات ويب وأنظمة إدارة محتوى كاملة. ولكن لا يجب أن يكون لديك رؤية كبيرة لتطبيق ويب معقد لاستخدام أدوات Python templating.
لماذا templating؟
تختلف كل أداة إعداد نموذج مختلف قليلاً ، ويجب عليك قراءة الوثائق لفهم الاستخدام الدقيق. لكن دعونا نخلق مثالًا افتراضيًا. لنفترض أنني أريد إنشاء صفحة قصيرة تعرض جميع موضوعات Python التي كتبت عنها مؤخرًا. شيء من هذا القبيل:
< html >
< head >
< title > مقالات My Python < / title >
< / head >
< body >
< p > هذه بعض الأشياء التي كتبتها عن Python: < / p >
< ul >
< li > Python GUIs < / li >
< li > IDEs Python < / li >
< li >بيثون كاشطات الويب < / li >
< / ul >
< / body >
< / html >
بسيطة بما فيه الكفاية للحفاظ على عندما يكون فقط هذه العناصر الثلاثة. ولكن ماذا يحدث عندما أريد إضافة الرابع ، أو الخامس ، أو السادس والسبعين؟ بدلاً من ترميز هذه الصفحة يدويًا ، هل يمكنني إنشاؤها من ملف CSV أو ملف بيانات آخر يحتوي على قائمة بجميع صفحاتي؟ هل يمكنني بسهولة إنشاء نسخ مكررة من هذا لكل موضوع كتبته؟ هل يمكنني تغيير النص أو العنوان أو العنوان برمجيًا على كل صفحة من هذه الصفحات؟ هذا هو المكان الذي يمكن أن يلعب محرك templating.
هناك العديد من الخيارات المختلفة للاختيار من بينها ، واليوم سأشارك معك ثلاثة ، ليس بترتيب معين: Mako و Jinja2 و Genshi .
ماكو
ماكو هو أداة لتوطين بايثون تم إصدارها بموجب ترخيص معهد ماساتشوستس للتكنولوجيا والتي تم تصميمها لأداء سريع (لا تختلف عن Jinja2). استخدم Reddit Mako لتزويد صفحات الويب الخاصة بهم بالطاقة ، بالإضافة إلى كونها لغة برمجة افتراضية لأطر الويب مثل Pyramid و Pylons. كما أنها بسيطة إلى حد ما ومباشرة للاستخدام ؛ يمكنك تصميم قوالب مع بضعة أسطر من التعليمات البرمجية. بدعم كل من Python 2.x و 3.x ، إنها أداة قوية وغنية بالميزات مع وثائق جيدة ، والتي أعتبرها ضرورية. تتضمن الميزات الفلاتر والميراث ، والمجموعات القابلة للاتصال ، ونظام التخزين المؤقت المضمّن ، والذي يمكن استيراده لمشاريع الويب الكبيرة أو المعقدة.
Jinja2
Jinja2 هو خيار آخر سريع وكامل المواصفات ، متوفر لكل من Python 2.x و 3.x بموجب ترخيص BSD. يحتوي Jinja2 على الكثير من التداخل من منظور مميز مع Mako ، لذلك بالنسبة إلى الوافد الجديد ، قد يكون اختيارك بين الاثنين هو النمط الذي تفضله. يقوم Jinja2 أيضًا بتجميع القوالب الخاصة بك إلى كود البايت ، ولديه ميزات مثل الهروب من HTML ، وضع الحماية ، وراثة القالب ، والقدرة على وضع أجزاء من القوالب. وتشمل مستخدميها موزيلا ، و SourceForge ، و NPR ، و Instagram ، وغيرها ، كما تحتوي على وثائق قوية . بخلاف ماكو ، الذي يستخدم بايثون في مضمون المنطق داخل القوالب الخاصة بك ، يستخدم Jinja2 بناء الجملة الخاص به.
Genshi
جينشي هو الخيار الثالث الذي سأذكره إنها حقًا أداة XML تحتوي على مكون قوي للتخطيط ، لذلك إذا كانت البيانات التي تعمل بها موجودة بالفعل بتنسيق XML ، أو كنت بحاجة إلى العمل باستخدام التنسيق خارج صفحة الويب ، فقد يكون Genshi حلًا جيدًا بالنسبة لك. HTML هو في الأساس نوع من XML (جيد ، ليس على وجه التحديد ، ولكن هذا خارج نطاق هذه المقالة وقزحية صغيرة) ، لذلك فإن تنسيقها متشابه تمامًا. نظرًا لأن الكثير من البيانات التي أعمل بها بشكل شائع هي ذات نكهة XML أو أخرى ، فإنني أقدر العمل باستخدام أداة يمكنني استخدامها لأشياء متعددة.
لا يدعم إصدار الإصدار حاليًا سوى Python 2.x ، على الرغم من وجود دعم Python 3 في صندوق السيارة ، إلا أنني أحذرك من أنه لا يبدو أنه يتلقى تطويرًا نشطًا. يتم توفير Genshi تحت رخصة BSD.
مثال
لذلك في المثال الافتراضي أعلاه ، بدلاً من تحديث ملف HTML في كل مرة أكتب فيها عن موضوع جديد ، يمكنني تحديثه برمجيًا. يمكنني إنشاء نموذج ، قد يبدو كالتالي:
< html >
< head >
< title > مقالات My Python < / title >
< / head >
< body >
< p > هذه بعض الأشياء التي كتبتها عن Python: < / p >
< ul >
٪ للموضوع في الموضوعات :
< li > $ {topic} < / li >
٪ endfor
< / ul >
</ هيئة >
< / html >
وبعد ذلك يمكنني التكرار عبر كل موضوع من خلال مكتبة النماذج ، في هذه الحالة ، ماكو ، على النحو التالي:
من ماكو. قالب استيراد قالب
mytemplate = قالب ( filename = 'template.txt' )
print ( mytemplate. render ( topics = ( "Python GUIs" ، "Python IDEs" ، "Python web scrapers" ) ) )
بالطبع ، في الاستخدام الحقيقي ، بدلاً من سرد المحتويات يدويًا في متغير ، من المحتمل أن أسحبهم من مصدر بيانات خارجي ، مثل قاعدة بيانات أو واجهة برمجة تطبيقات.
ليست هذه هي محركات بايثون الوحيدة التي تقوم بتجميعها. إذا كنت تبدأ في إنشاء مسار مشروع جديد سيزيد من استخدام النماذج ، فستحتاج إلى التفكير في أكثر من هذه النماذج الثلاثة. تحقق من هذه القائمة الأكثر شمولاً في موقع بايثون لمزيد من المشاريع الجديرة بالدراسة.