متغيرات لغة قالب جانغو

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

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

قاموس السياق

للبدء في جعل صفحاتك ديناميكية في عليك أن تتعرف على مفهوم قاموس السياق. و هو الوسيط الثالث الاختياري لدالة render().

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

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):
    goal_list = '<html><body><ul>'
    for goal in goals.keys():
        href = reverse('namedurl', args=[goal])
        goal_list += f'<li><a href="{href}">{goal}</a></li>'
    goal_list += '</ul></body></html>'
    return HttpResponse(goal_list)


def goals_by_int_timeframe(request, timeframe):
    timeframes = list(goals.keys())
    redirect_to = timeframes[timeframe - 1]
    named_redirect = reverse('namedurl', args=[redirect_to])
    return HttpResponseRedirect(named_redirect)


def goals_by_timeframe(request, timeframe):
    context = {'goal': goals[timeframe]}
    return render(request, 'goals/goal.html', context=context)

استخدام متغيرات السياق في القوالب

تتم الإشارة إلى المتغيرات في قوالب Django باستخدام الصيغة الخاصة المكونة من قوسين متعرجين، متبوعًا باسم المتغير، متبوعًا بقوسين متعرجين إضافيين:

  • {{ variable }}

هذا ليس كود HTML ولكن يتم التقاطه بواسطة Django أثناء تحليله وتقييمه لملف القالب. عندما يعثر محرك القالب على متغير، فإنه يقوم بتقييم ذلك المتغير واستبداله بالقيمة الموجودة في السياق.

يمكن أن تكون أسماء المتغيرات عبارة عن أي مجموعة من الأحرف الأبجدية الرقمية والشرطة السفلية (“_”) ولكن لا يجوز أن تبدأ بشرطة سفلية، او ان تكون رقمًا. كما لا يمكنك وضع مسافات.

دعونا نلقي نظرة على الكود التالي :

    context = {'goal': goals[timeframe]}

يمكننا أن نرى أن ‘goal’ أصبح متغيرًا يمكن الوصول إليه في القالب. دعونا نجرب ذلك!

<!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>
    <h1>{{ goal }}</h1>
</body>
</html>

والنتيجة هي أن لدينا الآن بيانات ديناميكية يتم تحميلها في القالب لكل عرض للصفحة.

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

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

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

<!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>
    <h1>Learn Something New</h1>
</body>
</html>

اترك تعليقاً

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

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

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

Continue reading

Scroll to Top