بدء استخدام قوالب Django

مكتمل

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

دعنا نستكشف كيفية عمل القوالب في Django.

المتغيرات

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

يوفر Django طريقة لعرض المتغيرات في أحد القوالب باستخدام الصيغة {{ }}. يتم تقييم أي متغير يتم وضعه داخل الأقواس المتعرجة المزدوجة لمحتوى النص الخاص به ثم يتم وضعه في القالب. إذا أردنا عرض الاسم الخاص بالكلب، على سبيل المثال، يمكننا استخدام {{dog.name}}.

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

عوامل تصفية

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

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

{{ dog.name | capfirst }}

يقع المتغير على يسار رمز الشريط العمودي (|)، ويقع عامل التصفية على اليمين. يُعد ذلك مجرد واحد من العديد من عوامل التصفية التي يمكنك استخدامها لمعالجة البيانات عندما تستخدم عوامل تصفية قالب Django.

علامات

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

يمكننا استخدام عبارات if للقيم المنطقية، والتكرارات الحلقية for للتكرار. تظهر الصيغة الأساسية لعبارات if كما يلي:

{% if dogs %}
    <h2>There are {{ dogs | length }} ready for adoption!</h2>
{% else %}
    <h2>We have no dogs ready for adoption. Please check back later!</h2>
{% endif %}

إشعار

يتم استخدام عبارة elif بالطريقة نفسها مثل elif في Python.

وبشكل مماثل، يمكننا استخدام تكرار for لعرض الأسماء الخاصة بجميع الكلاب في القائمة:

<ul>
    {% for dog in dogs %}
        <li>{{ dog.name }}</li>
    {% endfor %}
<ul>

توريث القالب

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

إنشاء صفحة ويب

يُعد إنشاء الصفحة الأصل مماثلاً لإنشاء أي قالب Django HTML. يمكنك توفير البنية الخارجية ثم تضمين العناصر النائبة {% block %}. تسمح هذه العناصر النائبة للعناصر الفرعية بتوفير المحتوى الذي سيتم وضعه في تلك العناصر النائبة.

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

<html>
<head>
    <link rel="stylesheet" href="site.css">
    <title>{% block title %}Shelter site{% endblock %}</title>
</head>
<body>
    <h1>Shelter site</h1>
    {% block content %}
    {% endblock %}
</body>
</html>

إنشاء صفحة فرعية

يمكننا إنشاء صفحة فرعية من الأصل باستخدام الكلمة الأساسية extends. باستخدام هذه الكلمة الأساسية، نقدم اسم ملف HTML الخاص بالقالب الأصل. نستخدم بعد ذلك عبارات {% block %} المناسبة لإضافة المحتوى المحدد لتلك الصفحة.

{% extends "parent.html" %}

{% block title %}
Welcome to the Shelter site!
{% endblock %}

{% block content %}
Thank you for visiting our site!
{% endblock %}

عند عرض الصفحة، تظهر كما يلي:

<html>
<head>
    <link rel="stylesheet" href="site.css">
    <title>Welcome to the shelter site</title>
</head>
<body>
    <h1>Shelter site</h1>
    Thank you for visiting our site!
</body>
</html>

لاحظ كيفية استبدال العناصر النائبة بالمحتوى الموجود في الصفحة الفرعية.

إشعار

بالنسبة لهذا المثال، استخدمنا نصاً ثابتاً. وكما سترى، يمكنك أيضاً استخدام المحتوى الديناميكي.