اذهب إلى المحتوى

السؤال

نشر

اريد ان اضيف صفحه الخطا 404 في مشروع دجانغو ولكن لم استطيع بعد فعلت الخطوات لكن هناك مشكله ما 
هذا في main_app/urls.py
from . import views
 from django.conf.urls import handler404
handler404 = views.error404

وهذا في main_app./veiws.py
def error404(request, exception):
return render(request, '404.html', status=404)

وبالتاكيد لدي القالب في المكان الصحيح و ال  ALLOWED_HOSTS = ["*"]   , DEBUG = False , في الاعدادات 
النتيجه Server Error (500) عند طلب مسار غير صحيح و ايضا لا يرا الملفات الثابته
هناك اكثر من تطبيق في المشروع لكن هذه ليست مشكله في اعتقادي لانني فعلت الخطوات في مشروع واحد

Recommended Posts

  • 0
نشر

السلام عليكم ورحمة الله تعالى وبركاته،

المشكلة الأساسية هي وضع handler404 في ملف main_app/urls.py بدلا من الملف الرئيسي urls.py للمشروع مما يجعل Django يتجاهله ويعطي خطأ 500 عند DEBUG=False لحل المشكلة انقل السطر:

handler404 = views.error404

 إلى ملف project/urls.py أي الرئيسي وليس تطبيقك مع التأكد من الاستيراد الصحيح، وبالنسبة لمشكلة الملفات الثابتة عند DEBUG=False تحتاج collectstatic وإعداد STATIC_ROOT:

STATIC_URL = '/static/'
STATIC_ROOT = BASE_DIR / 'staticfiles'  
STATICFILES_DIRS = [BASE_DIR / 'static'] 

ثم شغل:

python manage.py collectstatic --noinput

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

  • 0
نشر

المشكلة التي تواجهها طبيعية جداً وتحدث معنا جميعاً عند الانتقال من بيئة التطوير (Development) إلى الإنتاج (Production) أو عند تجربة DEBUG = False. الخطأ (500) يعني أن "الكود الخاص بصفحة 404 نفسه فيه مشكلة" أو أن جانغو لا يستطيع الوصول إليه بشكل صحيح.

إليك الحل من واقع خبرتي في هذه النقطة تحديداً:

1. مكان handler404 (السبب الأرجح)

أنت ذكرت أنك وضعت الكود في main_app/urls.py.

جانغو يبحث عن handler404 في ملف urls.py الرئيسي للمشروع (Project Level) وليس داخل التطبيقات الفرعية (App Level). الملف الذي يحتوي عادةً على

path('admin/', admin.site.urls).

الحل: انقل سطر

handler404 = 'main_app.views.error404' 

إلى ملف urls.py الرئيسي للمشروع.

2. مشكلة الملفات الثابتة (Static Files)

عندما تضبط DEBUG = False، جانغو يتوقف فوراً عن تقديم الملفات الثابتة (CSS, JS, Images). هو مصمم هكذا لأنه يفترض أنك الآن تستخدم خادم مثل Nginx أو Apache للقيام بهذه المهمة.

لهذا السبب لا تظهر التنسيقات، وربما هذا هو سبب الخطأ 500 إذا كان قالب 404.html يحاول استدعاء ملفات غير موجودة بطريقة خاطئة.

الحل المؤقت للمعاينة: لكي ترى الصفحة وتتأكد أن كل شيء يعمل وأنت على جهازك (Localhost) مع DEBUG = False، شغل السيرفر بهذا الأمر:

python manage.py runserver --insecure

هذا الأمر يجبر جانغو على تقديم الملفات الثابتة حتى لو كان الديبرج مغلقاً.

3. التحقق من الخطأ الحقيقي

الخطأ 500 هو خطأ عام يخفي المشكلة الحقيقية. بما أن DEBUG = False، أنت لا ترى "Log" الخطأ في المتصفح.

الحل: انظر إلى التيرمينال (شاشة الأوامر) التي يعمل فيها السيرفر، ستجد سبب الـ 500 مكتوباً هناك (غالباً سيكون TemplateSyntaxError أو مشكلة في الاستيراد Import Error بسبب نقل الـ Handler).

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...