رفع خطای TemplateDoesNotExist در جنگو
یکی از رایجترین ارورهایی که توسعهدهندگان در جنگو با آن روبهرو میشوند، خطای TemplateDoesNotExist می باشد. ارور مذکور به این معنا است که جنگو نمیتواند فایل قالب موردنظر را بیابد. دلایل مختلفی می توانند باعث ایجاد ارور TemplateDoesNotExist شوند که در ادامه به آنها اشاره شده است.
1- بررسی تنظیمات TEMPLATES در فایل settings.py
جنگو برای پیدا کردن فایلهای قالب از تنظیمات موجود در فایل settings.py استفاده میکند. اطمینان حاصل کنید که بخش مربوط به TEMPLATES به درستی تنظیم شده باشد. تنظیمات استاندارد باید مشابه نمونه زیر باشد:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR / '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',
],
},
},
]
-
DIRS: این گزینه مسیرهایی را مشخص میکند که جنگو برای پیدا کردن فایلهای قالب آنها را جستجو مینماید. معمولاً از مسیر BASE_DIR / 'templates' استفاده میشود که در آن BASE_DIR به دایرکتوری اصلی پروژه اشاره دارد.
-
APP_DIRS: اگر این مقدار می بایست روی True تنظیم شود، جنگو به صورت خودکار فولدر templates موجود در هر اپلیکیشن را نیز جستجو میکند.
2- بررسی وجود فولدر و فایل قالب
برای اینکه جنگو بتواند فایلهای قالب را پیدا کند، باید ساختار پروژه به درستی تنظیم شده باشد. با توجه به اینکه پوشه templates می تواند هم در سطح پروژه و هم در سطح اپلیکیشن وجود داشته باشد، لذا گر ساختار پوشه ها یا نام فایلها درست نباشد نیز ممکن است خطای فوق رخ دهد.
3- استفاده صحیح از تابع render در ویوها
هنگام استفاده از تابع render در ویوهای خود، باید نام فایل قالب را دقیقاً با مسیر صحیح مشخص کنید. نمونه کد زیر نحوه صحیح استفاده از render را نشان میدهد:
from django.shortcuts import render
def my_view(request):
return render(request, 'app_name/your_template.html')
توجه داشته باشید که اگر فایل قالب در فولدر عمومی templates (در کنار دایرکتوری پروژه) قرار دارد، نیازی به ذکر نام اپلیکیشن نیست اما اگر فایل در فولدر templates/app_name/ داخل یک اپلیکیشن قرار دارد، باید مسیر به صورت کامل نوشته شود.
4- بررسی نام و پسوند فایل قالب
گاهی ممکن است مشکل به دلیل اشتباهات سادهای مانند نامگذاری نادرست فایل باشد. مطمئن شوید که نام فایل قالب دقیقاً همان موردی است که در ویو مشخص کردهاید و پسوند آن نیز html. است.
5- بررسی ارجاعات به قالبهای دیگر
اگر فایل قالب شما از قالب دیگری استفاده میکند (مثلاً با extends یا include)، مطمئن شوید که قالبهای مرجع نیز در مسیر صحیح قرار دارند و به درستی فراخوانی شدهاند. برای مثال در قطعه کد نمونه زیر فایل base.html می بایست در مسیر مشخصشده قابل دسترسی باشد.
{% extends 'base.html' %}
{% block content %}
<h1>Welcome to my page</h1>
{% endblock %}
6- بررسی لاگهای خطا و فعال کردن حالت Debug
برای دریافت اطلاعات دقیقتر درباره خطا، حالت Debug را در تنظیمات فعال کنید تا جزئیات بیشتری از خطا نمایش داده شود چرا که میتواند به شما در شناسایی مشکل کمک کند. بدین منظور در فایل settings.py مقدار DEBUG را روی True قرار دهید:
DEBUG = True
توجه داشته باشید که بعد از اعمال هرگونه تغییر در فایلها یا تنظیمات، باید سرور جنگو را ریاستارت کنید تا تغییرات اعمال شوند.