كيفية تسجيل القوالب في جانغو

من الممكن إرسال HTML إلى متصفح الويب في جانغو مباشرةً من ملف view.py. و لكن من الأفضل التعامل مع HTML في Django من خلال استخدام القوالب.

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

مسار قالب جانغو

إذن أنت جاهز لإنشاء قالب جديد لمشروع Django الخاص بك. التقليد في جانغو هو وضع القالب في مجلد التطبيق الخاص بك، ثم في داخل المجلد قم بإنشاء مجلد يسمى templates.

ثم داخل مجلد القوالب، قم بإنشاء مجلد آخر يحمل نفس اسم التطبيق. بعد ذلك سيكون دليل القالب عبارة عن goals/templates/goals.

مسار قالب جانغو

إنشاء قالب

لإنشاء قالب، يمكننا إضافة ملف HTML إلى دليل goals/templates/goals. دعونا نسمي هذا الملف goal.html.

vs-code-django-template

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

vscode-editor_quickSuggestions

اضغط على مفتاح Tab، ومن المفترض أن يحتوي قالب HTML الخاص بك الآن على بعض العلامات الأساسية. لاحظ أننا أضفنا علامة H1 مع بعض النصوص أيضًا.

<!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>The Template Works!</h1>
</body>
</html>

تسجيل قالب جانغو

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

TemplateDoesNotExist at /goals/daily

goals/goal.html

Request Method: 	GET
Request URL: 	http://127.0.0.1:8000/goals/daily
Django Version: 	3.2.4
Exception Type: 	TemplateDoesNotExist
Exception Value: 	

goals/goal.html

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

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

يتم استخدام مفتاح DIRS الموجود في الكود السابق لإخبار Django بمسارات الدليل التي يجب البحث فيها عن ملفات قالب HTML. ويساعدنا جانغو في هذا الصدد من خلال توفير متغير BASE_DIR في أعلى ملف settings.py.

BASE_DIR = Path(__file__).resolve().parent.parent

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

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            BASE_DIR / 'goals' / 'templates'
        ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

إرسال القالب إلى HttpResponse

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

يمكننا استخدام دالة render_to_string() و التي يجب استيرادها داخل ملف view.py الخاص بنا بهذه الطريقة:

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

يمكننا الآن استخدام دالة render_to_string() في أي دالة من دوال العرض لدينا، وتمريرها إلى مسار القالب الذي نريد عرضه.

def goals_by_timeframe(request, timeframe):
    goal = goals[timeframe]
    response_data = render_to_string('goals/goal.html')
    return HttpResponse(response_data)

يعرض الكود السابق القالب الخاص بنا إلى سلسلة HTML ويخزنه في متغير Response_data. عند هذه النقطة، نعيد HttpResponse مع المتغير Response_data. ثم إذا قمنا بزيارة عنوان URL المناسب لتشغيل دالة العرض، فسنرى أن القالب معروض بشكل صحيح في متصفح الويب.

django-render_to_string-function

أفضل طريقة لتسجيل القوالب

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

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

قد يتساءل شخص لماذا فشل Django في العثور على القالب الذي أنشأناه في محاولتنا الأولى؟ والسبب هو أنه حتى هذه اللحظة، لم نسجل تطبيقنا كجزء من INSTALLED_APPS في settings.py.

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

INSTALLED_APPS = [
    'goals',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

مع هذا التغيير، يستمر القالب الخاص بنا في العمل، وكل ما كان علينا فعله هو إضافة اسم التطبيق إلى INSTALLED_APPS حتى تسهل عملية تسجيل أي قالب لهذا التطبيق مع Django. بالنسبة للقوالب الخاصة بالتطبيقات، هذا هو الطريق المناسب. ما عليك سوى ترك APP_DIRS مضبوطًا على True، وإضافة اسم التطبيق إلى INSTALLED_APPS. و تعتبر هذه الطريقة أفضل الممارسات التي تحافظ على إعداداتك نظيفة وقابلة للصيانة.


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

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

اترك تعليقاً

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

Scroll to Top

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

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

Continue reading