كيفية استخدام علامات جانغو

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

تعمل العلامات على سد هذه الفجوة وتسهيل القدرة على إخراج المحتوى، والعمل كهيكل تحكم، وتمكين منطق if/else، وتوفير وظيفة التكرار عبر البيانات الديناميكية التي تم تمريرها إلى القالب. في هذا الدرس سنلقي نظرة على بعض الأمثلة لاستخدام العلامات في قوالب Django.

العلامة الأكثر أهمية: for

ربما تكون الحلقات أحد أهم المفاهيم في البرمجة. وهو ما يمكّن المطورين من تكرار مجموعات البيانات الكبيرة باستخدام كمية صغيرة فقط من التعليمات البرمجية. في Django، غالبًا ما نقوم بتمرير البيانات إلى ملف القالب من ملف view.py الذي يحتوي على أكثر من متغير واحد. و في مثل هذه الحالات، نحتاج إلى أن نكون قادرين على التكرار في قالب HTML. هذا هو الغرض من علامات DTL.

إعداد البيانات في Views.py

from django.shortcuts import redirect, render
from django.http import HttpResponse, HttpResponseRedirect
from django.urls import reverse

# dictionary data store
goals = {
    'daily': 'Learn Something New',
    'weekly': 'Take a day off',
    'monthly': 'Complete a creative course'
}


def homepage(request):
    timeframes = list(goals.keys())
    return render(request, 'goals/index.html', {'timeframes': timeframes})

مفتاح سياق ‘timeframes’ هو ما يصبح متغيرًا في القالب حيث يحتوي متغير timeframes في هذه المرحلة الزمنية على القيمة [‘daily’, ‘weekly’, ‘monthly’].

استخدام علامة for في القالب

يمكننا الآن تحويل انتباهنا إلى القالب الذي سيتم عرضه والذي يحمل اسم Index.html.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
<ul>
{% for timeframe in timeframes %}
    <li>{{ timeframe }}</li>
{% endfor %}
</ul>
</body>
</html>

تخبر العلامة {% جانغو أننا على وشك استخدام علامة. يفهم Django هذا وبالتالي يقوم بتقييم ما هو بين العلامتين {% %} كعلامة في Django. ولذلك عندما نرى هذا الكود:

{% for timeframe in timeframes %}
    <li>{{ timeframe }}</li>
{% endfor %}

نحن نقول أنه لكل قيمة في قائمة الأطر الزمنية، قم بإخراج تلك القيمة بين عناصر <li> بالإضافة إلى ذلك، تتطلب بعض العلامات عبارات الإغلاق. العلامة for هي إحدى هذه العلامات. و هذا هو السبب وراء ضرورة إضافة endfor لإكمال الكتلة.

dtl-for-tag

تم تسمية متغير الإطارات الزمنية على هذا النحو لأن هذا هو اسم المفتاح في قاموس سياق العرض. وهذا يعني أنه يجب استخدام هذا الاسم في القالب.

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

{% for yahoo in timeframes %}
    <li>{{ yahoo }}</li>
{% endfor %}

if else endif

تعتبر العلامات مفيدة للمنطق البسيط في ملف القالب. يمكننا استخدام if و else و endif بين الأحرف الخاصة {% %} لتفعيلها في القالب.

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

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
<ul>
{% for timeframe in timeframes reversed %}
    {% if timeframe == 'monthly' %}
        <li>{{ timeframe|upper }}</li>
    {% else %}
        <li>{{ timeframe|capfirst }}</li>
    {% endif %}
{% endfor %}
</ul>
</body>
</html>
if-else-endif-dtl

إلى هنا أكون إنتهيت من هذا الدرس ولمزيد من هذه العلامات يمكنك زيارة وثائق جانغو الرسمية


اكتشاف المزيد من بايثون العربي

اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

Scroll to Top

اكتشاف المزيد من بايثون العربي

اشترك الآن للاستمرار في القراءة والحصول على حق الوصول إلى الأرشيف الكامل.

Continue reading