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

لا تظهر صفحة خطأ مخصصة في جانغو Django

Mohssen A Mohssen

السؤال

لا يمكنني إنشاء صفحة خطأ 500 أو 404 مخصصة. إذا قمت بكتابة عنوان url غير صحيح، يتم إعادة صفحة الخطأ الافتراضية.

في ملف settings.py قمت بكتابة الإعدادات التالية:

DEBUG = False
TEMPLATE_DEBUG = DEBUG

#....

TEMPLATE_DIRS = (
    'C:/Users/Mohssen/Django/mysite/templates', 
)

وفي ملف mysite/polls/urls.py لدي المسارات التالية:

from django.conf.urls import patterns, url

from polls import views

urlpatterns = patterns('',
    url(r'^$', views.index, name='index'),
    url(r'^(?P<poll_id>\d+)/$', views.detail, name='detail')
)

ما الذي يجب تغييره للحصول على صفحة خطأ 404 مخصصة إذا استخدمت عنوان url خاطيء؟

هل هناك أي شيء يجب أن أتحقق منه ويمنع ظهور صفحة خطأ مخصصة؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

أجل يمكنك إضافة صفحات لعناوين url المجهولة والغير متاحة في مشروعك ,أو أي خطأ.

تابع التالي

أولا في ملف settings.py يجب إلغاء وضع التصحيح أو التطوير {Debugging}, من خلال تمرير False إلى DEBUG بدلا من True

DEBUG = False

ALLOWED_HOSTS = ['*']

# Application definition

ثانيا يجب إنشاء ملفين html للأخطاء 404 و 500 في مجلد templates سنفترض أن أسمائهما كما يلى:

404.html
500.html

لك كامل الحرية في محتوى تلك الصفحات ولكن إليك مثال بسيط لصفحة 404:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>CodePen - 404 Concept Page @property</title>
</head>
<body>

<h1>404</h1>
<div class="info">
  <h1>Error: {{status}} </h1>
  <h2>We can't find that page</h2>
  <a href="/app" target="_blank">Go To Home</a> <!-->اذهب إلى الصفحة الرئيسية </-->
</div>

</body>
</html>

ثالثا إضافة دالتين إلي ملف views.py 

from django.shortcuts import render

# Create your views here.


def index(request):
    """دالة الصفحة الرئيسية """
    return render(request, 'index.html')

  
def error_404(request, exception):
    """دالة يتم تنفيذها في حال وجود خطأ404"""
    return render(request,'404.html', status=404)

def error_500(request, *args, **argv):
    """نفس الدالة السابقة ولكن يتم تنفيذها في حال وجود خطأ يشير إلى الكود500"""
    return render(request, '500.html', status=500) #تأكد من كتابة اسم الملف أو القالب بشكل صحيح 

أخيرا ستقوم بإستدعاء هاتين الدالتين بداخل ملف urls.py الخاص بمشروعك ,أو تطبيقك ولكنه في كل الأحوال سيعمل.

اقتباس

تذكير: يوجد ملف urls.py في المشروع الرئيسي بجوار ملفات settings.py و wsgi.py وهناك ملف urls.py أخر أو أكثر يتم إنشائه عادة في التطبيقات الفرعية أو ال Apps الموجودة داخل Django.

يمكنك اضافة الجزء التالي إلى واحد من تلك الملفات وإن كنت أرجح كتابته في urls.py الرئيسي, وهذا ما قمت به في المثال أدناه.

فيما يلي التعديل المطلوب في ملف urls.py

from django.contrib import admin
from django.urls import path
from django.conf.urls import include, handler404 ,handler500 #إستدعاء لدوال مهم
from myapp import views #استدعاء الفيو التي بداخلها الدوال التي أنشأنها


urlpatterns = [
    path('admin/', admin.site.urls),
    path('app/', include('myapp.urls')),
]

#السطور المهمة
handler404 = views.error_404 #يتم اسناد قيم الخطأ إلي الدالة 404
handler500 = views.error_500 #نفس الأمر ولكن لدالة 500

يمكن تجربة تخصيص صفحتي 404 و 500 بطرق مختلفة لكن هذه ربما الأقل تعقيداً, ومن المهم جداً أن تتذكر بأن صفحاتك المخصصة لن تظهر ومشروعك في وضع DEBUG يجب عليك تعطيله هكذا DEBUG = False من ملف الإعدادات كما وضحنا في البداية, وقد يطلب منك إعداد العناوين المسموح لها بزيارة موقعك ALLOWED_HOSTS , على أي حال قم بضبطها إلى

ALLOWED_HOSTS = ['*']

النتائج ستكون كما يلي,

Screenshot_423.png.11a30bbea14d02bfe670cd59c450ec44.png

بالتوفيق.

تم التعديل في بواسطة Mohammed_Emad
تعديل كود views.py
رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...