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

السؤال

نشر

اواجهة مشكلة عدم عمل ملفات media

settings.py:

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/5.0/howto/static-files/
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = 'static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'cyberZ_website/static/')
]

# Media files
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

urls.py الخاص بالمشروع:
 

from django.contrib import admin
from django.urls import include, path
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('home.urls')),
    path('blog/', include('blog.urls')),
    path('dashboard/', include('dashboard.urls')),

]

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

models.py:
 

def course_image_upload_path(instance, filename):
    """يحدد مسار حفظ الصور داخل مجلد Courses حسب السنة والشهر واليوم"""
    return os.path.join("Courses", now().strftime("%Y/%m/%d"), filename)

class Course(models.Model):
    name = models.CharField(max_length=200)  # اسم الدورة
    price = models.DecimalField(max_digits=10, decimal_places=2)  # سعر الدورة
    start_date = models.DateField()  # تاريخ بدء الدورة
    duration_weeks = models.PositiveIntegerField(default=8)  # مدة الدورة بالأسابيع
    language = models.CharField(max_length=50, default='English')  # لغة الدورة
    schedule = models.CharField(max_length=100, default="6:00 PM - 9:00 PM EST")  # وقت الدورة
    mode = models.CharField(max_length=50, default="Online")  # طريقة الدورة (أونلاين / حضورياً)
    image = models.ImageField(upload_to=course_image_upload_path, default='default_course.jpg')  # صورة الدورة
    created_at = models.DateTimeField(auto_now_add=True)  # وقت إنشاء الدورة
    what_will_you_learn = models.TextField(default='[]')  # ماذا سيتعلم الطلاب؟
def __str__(self):
        return f"{self.name} ({self.start_date.strftime('%B %Y')})"

views.py:

def home(request):
    # courses section
    courses = Course.objects.all().order_by('-created_at')
context = {
        'stripe_publishable_key': settings.STRIPE_PUBLISHABLE_KEY,
        'recaptcha_site_key': settings.RECAPTCHA_PUBLIC_KEY,  # إرسال المفتاح العام للقالب
        'courses': courses,
    }

    return render(request, 'pages/home.html', context)

هنا الاستدعاء في ملف html و انا خاله في حلقة {% for course in courses %}
 

<img class="course-image" src="{{ course.image.url }}" alt="{{ course.name }}">

هذه الخطأ الي تظهر لي و الصورة لا تظهر
WARNING "GET /static/images/cyberZlogo HTTP/1.1" 404 179
WARNING Not Found: /media/default_course.jpg
WARNING Not Found: /media/Courses/2025/03/28/python.png
WARNING "GET /media/default_course.jpg HTTP/1.1" 404 179
WARNING "GET /media/Courses/2025/03/28/python.png HTTP/1.1" 404 179
WARNING Not Found: /media/default_course.jpg
WARNING "GET /media/default_course.jpg HTTP/1.1" 404 179
WARNING Not Found: /media/Courses/2025/03/28/python.png
WARNING "GET /media/Courses/2025/03/28/python.png HTTP/1.1" 404 179

Recommended Posts

  • 0
نشر

الطريقة التي أضفت بها إعدادات تقديم ملفات الوسائط في ملف urls.py الرئيسي باستخدام static() تعمل فقط عندما يكون وضع التصحيح DEBUG مضبوطاً على True في ملف settings.py، تأكد من أنّ القيمة هي True.

فالطريقة مخصصة لخادم التطوير المدمج في Django من خلال manage.py runserver  لتسهيل عملية التطوير، أما في بيئة الإنتاج Production، يجب أن يتولى خادم الويب Nginx أو Apache مهمة تقديم تلك الملفات مباشرة، أو استخدام whitenoise

ستجد تفصيل هنا:

 

  • 0
نشر

عندما يكون DEBUG = False لا يتم خدمة ملفات الوسائط (media files) تلقائيا كما يحدث في وضع التطوير، أما في بيئة الإنتاج (عندما DEBUG = False)، يجب عليك استخدام خادم ويب مثل Nginx أو Apache لخدمة الملفات الثابتة وملفات الوسائط.

بالنسبة لخدمة ملفات الوسائط (media files) عندما يكون DEBUG = False، يجب استخدام خادم ويب مثل Nginx أو Apache لخدمة هذه الملفات.

أما عندما يكون DEBUG = True، يتيح Django خدمة الملفات الثابتة (static files) والوسائط (media files) بشكل تلقائي ففي ملف settings.py، يتم تعريف هذه الإعدادات كالتالي:

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'cyberZ_website/static/')
]
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

وفي urls.py يمكن إضافة مسارات خدمة هذه الملفات كالتالي:

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
]

if settings.DEBUG:
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

DEBUG = True سيسمح بخدمة الملفات الثابتة والوسائط مباشرة من مجلداته في حين STATIC_URL و MEDIA_URL سيحددان المسار الافتراضي للوصول إلى هذه الملفات.

STATICFILES_DIRS سيحدد المجلدات الإضافية للملفات الثابتة، بينما STATIC_ROOT و MEDIA_ROOT يحددان المسار الفعلي لتخزين هذه الملفات.

  • 0
نشر
بتاريخ 6 ساعة قال ياسر مسكين:

عندما يكون DEBUG = False لا يتم خدمة ملفات الوسائط (media files) تلقائيا كما يحدث في وضع التطوير، أما في بيئة الإنتاج (عندما DEBUG = False)، يجب عليك استخدام خادم ويب مثل Nginx أو Apache لخدمة الملفات الثابتة وملفات الوسائط.

بالنسبة لخدمة ملفات الوسائط (media files) عندما يكون DEBUG = False، يجب استخدام خادم ويب مثل Nginx أو Apache لخدمة هذه الملفات.

أما عندما يكون DEBUG = True، يتيح Django خدمة الملفات الثابتة (static files) والوسائط (media files) بشكل تلقائي ففي ملف settings.py، يتم تعريف هذه الإعدادات كالتالي:

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'cyberZ_website/static/')
]
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

وفي urls.py يمكن إضافة مسارات خدمة هذه الملفات كالتالي:

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
]

if settings.DEBUG:
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

DEBUG = True سيسمح بخدمة الملفات الثابتة والوسائط مباشرة من مجلداته في حين STATIC_URL و MEDIA_URL سيحددان المسار الافتراضي للوصول إلى هذه الملفات.

STATICFILES_DIRS سيحدد المجلدات الإضافية للملفات الثابتة، بينما STATIC_ROOT و MEDIA_ROOT يحددان المسار الفعلي لتخزين هذه الملفات.

اذا ما هو الحل لكي تعمل ملفات media عندما يكون DEBUG = False

  • 0
نشر
بتاريخ 2 ساعة قال Mustafa Suleiman:

ستجد الحل هنا باستخدام مكتبة whitenoise

 

اخي الكريم انا استخدم مكتبة whitenoise
لكن عند اضافة هذا السطر في settings.py
 

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

السيرفر يرجع 
Server Error (500)

  • 0
نشر
بتاريخ 42 دقائق مضت قال عزوز عزوز2:

اخي الكريم انا استخدم مكتبة whitenoise
لكن عند اضافة هذا السطر في settings.py
 

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

السيرفر يرجع 
Server Error (500)

أرفق مجلد المشروع لتفقده

  • 0
نشر
بتاريخ 15 ساعة قال ياسر مسكين:

عندما يكون DEBUG = False لا يتم خدمة ملفات الوسائط (media files) تلقائيا كما يحدث في وضع التطوير، أما في بيئة الإنتاج (عندما DEBUG = False)، يجب عليك استخدام خادم ويب مثل Nginx أو Apache لخدمة الملفات الثابتة وملفات الوسائط.

بالنسبة لخدمة ملفات الوسائط (media files) عندما يكون DEBUG = False، يجب استخدام خادم ويب مثل Nginx أو Apache لخدمة هذه الملفات.

أما عندما يكون DEBUG = True، يتيح Django خدمة الملفات الثابتة (static files) والوسائط (media files) بشكل تلقائي ففي ملف settings.py، يتم تعريف هذه الإعدادات كالتالي:

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'cyberZ_website/static/')
]
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

وفي urls.py يمكن إضافة مسارات خدمة هذه الملفات كالتالي:

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
]

if settings.DEBUG:
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

DEBUG = True سيسمح بخدمة الملفات الثابتة والوسائط مباشرة من مجلداته في حين STATIC_URL و MEDIA_URL سيحددان المسار الافتراضي للوصول إلى هذه الملفات.

STATICFILES_DIRS سيحدد المجلدات الإضافية للملفات الثابتة، بينما STATIC_ROOT و MEDIA_ROOT يحددان المسار الفعلي لتخزين هذه الملفات.

الاستضافة التي مرفوع عليها المشروع تستخدم Apache

ويجب اضافة كود داخل ملف .htaccess لكي يسمح بعمل ملفات media 

هل يمكن اعطائي كود لكي اضعه في .htaccess؟

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...