البرمجة

أهم مرشحات Jinja القياسية

أهم المرشحات المتوفرة بشكل قياسي في محرك القوالب Jinja – الجزء الأول

محرك القوالب Jinja هو أحد أشهر وأقوى أدوات القوالب المستخدمة في لغة بايثون، وهو يتمتع بشعبية كبيرة في تطوير تطبيقات الويب، خصوصًا مع أطر العمل مثل Flask وDjango (عبر بعض التعديلات). من أهم ميزات Jinja هو دعمه الواسع للمرشحات (Filters)، وهي أدوات تسمح بمعالجة البيانات وتعديلها بشكل مرن وسلس داخل القوالب. المرشحات تسهل التعامل مع البيانات وتجعل القوالب أكثر تفاعلية وديناميكية، حيث يمكن للمطورين تعديل النصوص، القوائم، الأرقام، والتواريخ بسهولة قبل عرضها للمستخدم النهائي.

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


مفهوم المرشحات في Jinja

قبل الخوض في تفاصيل المرشحات، من المهم فهم ما هي المرشحات في سياق Jinja. ببساطة، المرشح هو وظيفة يتم تطبيقها على المتغيرات داخل القالب لتحويلها أو تعديلها أو تنسيقها. الشكل الأساسي لاستخدام المرشح هو:

jinja
{{ variable | filter_name }}

يمكن أيضًا تمرير معاملات إلى المرشحات في بعض الحالات، مثل:

jinja
{{ variable | filter_name(argument) }}

المرشحات تساعد في تحسين جودة العرض وتوفير الوقت، إذ لا حاجة لكتابة الكثير من التعليمات البرمجية في ملفات بايثون، بل يمكن تعديل القيم مباشرة في القوالب.


1. مرشح lower

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

مثال:

jinja
{{ "HELLO WORLD" | lower }}

النتيجة:

nginx
hello world

2. مرشح upper

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

مثال:

jinja
{{ "hello world" | upper }}

النتيجة:

nginx
HELLO WORLD

3. مرشح capitalize

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

مثال:

jinja
{{ "python programming" | capitalize }}

النتيجة:

nginx
Python programming

4. مرشح title

يقوم بتحويل كل كلمة في النص إلى حرف كبير في أولها، وهو شائع الاستخدام في العناوين التي تتطلب تنسيقًا خاصًا.

مثال:

jinja
{{ "python programming language" | title }}

النتيجة:

sql
Python Programming Language

5. مرشح trim

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

مثال:

jinja
{{ " hello world " | trim }}

النتيجة:

nginx
hello world

6. مرشح striptags

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

مثال:

jinja
{{ "Hello World" | striptags }}

النتيجة:

nginx
Hello World

7. مرشح replace

يتيح هذا المرشح استبدال جزء من النص بآخر. يأخذ معاملين: النص المراد استبداله، والنص الجديد.

مثال:

jinja
{{ "Hello World" | replace("World", "Jinja") }}

النتيجة:

nginx
Hello Jinja

8. مرشح length

يستخدم هذا المرشح لحساب طول السلسلة النصية أو عدد العناصر في قائمة أو أي بنية بيانات قابلة للعد.

مثال:

jinja
{{ "Hello" | length }}

النتيجة:

5

وأيضًا يمكن استخدامه مع القوائم:

jinja
{{ [1, 2, 3, 4] | length }}

النتيجة:

4

9. مرشح default

هذا المرشح مهم جداً لتوفير قيمة افتراضية في حالة كانت القيمة الأصلية فارغة أو غير موجودة (None أو False). مفيد لضمان عدم ظهور محتوى فارغ في الصفحة.

مثال:

jinja
{{ username | default("Guest") }}

في حالة عدم وجود متغير username، أو إذا كان فارغًا، سيتم عرض “Guest”.


10. مرشح join

يُستخدم هذا المرشح لدمج قائمة من العناصر إلى سلسلة نصية مفصولة بفاصل معين. يأخذ الفاصل كسلسلة نصية.

مثال:

jinja
{{ ["Python", "Jinja", "Flask"] | join(", ") }}

النتيجة:

Python, Jinja, Flask

11. مرشح sort

يقوم هذا المرشح بترتيب عناصر القائمة تصاعدياً بشكل افتراضي. يمكن أن يكون مفيدًا لترتيب البيانات في العرض.

مثال:

jinja
{{ [3, 1, 4, 2] | sort }}

النتيجة:

csharp
[1, 2, 3, 4]

12. مرشح reverse

يعمل هذا المرشح على عكس ترتيب عناصر القائمة أو النص.

مثال:

jinja
{{ [1, 2, 3, 4] | reverse }}

النتيجة:

csharp
[4, 3, 2, 1]

وأيضًا مع النصوص:

jinja
{{ "abcd" | reverse }}

النتيجة:

nginx
dcba

13. مرشح round

يستخدم هذا المرشح لتقريب الأعداد العشرية إلى عدد محدد من المنازل العشرية، ويأخذ معاملًا اختياريًا لتحديد عدد الأرقام بعد الفاصلة.

مثال:

jinja
{{ 3.14159 | round(2) }}

النتيجة:

3.14

14. مرشح int

يقوم بتحويل القيمة إلى عدد صحيح. هذا مفيد لتحويل أنواع البيانات أو التعامل مع القيم الرقمية قبل عرضها.

مثال:

jinja
{{ "123" | int }}

النتيجة:

123

15. مرشح float

يشابه المرشح السابق، لكنه يقوم بتحويل القيمة إلى عدد عشري (float).

مثال:

jinja
{{ "3.14" | float }}

النتيجة:

3.14

جدول مقارنة لأهم المرشحات ووظائفها

المرشح الوظيفة مدخلات إضافية ملاحظات
lower تحويل النص إلى حروف صغيرة لا مفيد للتوحيد
upper تحويل النص إلى حروف كبيرة لا لجعل النص بارزاً
capitalize تكبير الحرف الأول فقط لا مناسب للعناوين
title تكبير أول حرف لكل كلمة لا شائع في تنسيق العناوين
trim إزالة الفراغات من البداية والنهاية لا لتنظيف النصوص
striptags إزالة الوسوم HTML لا للحماية والتنظيف
replace استبدال نص معين نعم يستقبل نصين (قديم، جديد)
length حساب الطول أو عدد العناصر لا يدعم النصوص والقوائم
default إظهار قيمة افتراضية إذا كان فارغ نعم يحسن تجربة المستخدم
join دمج قائمة إلى نص مفصول نعم يستخدم فاصل نصي
sort ترتيب العناصر تصاعدياً لا مفيد للقوائم
reverse عكس الترتيب لا يدعم النصوص والقوائم
round تقريب الأعداد نعم (عدد المنازل) يدعم تقريب القيم الرقمية
int تحويل إلى عدد صحيح لا لتحويل النصوص إلى أعداد صحيحة
float تحويل إلى عدد عشري لا لتحويل النصوص إلى أعداد عشرية

الخاتمة

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

في الجزء الأول من هذا المقال تم استعراض أهم وأشهر المرشحات القياسية التي توفر إمكانيات واسعة لمعالجة النصوص، القوائم، والأرقام. تظل معرفة كيفية استخدام هذه المرشحات بشكل فعّال مفتاحًا لإتقان التعامل مع محرك Jinja والرفع من جودة التطبيق بشكل عام.


المصادر