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

السؤال

نشر

اواجهة مشكلة عدم عمل ملفات 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
نشر
  بتاريخ On 28‏/3‏/2025 at 04:16 قال ياسر مسكين:

عندما يكون 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
نشر
  بتاريخ On 28‏/3‏/2025 at 10:37 قال Mustafa Suleiman:

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

 

أظهر المزيد  

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

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

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

  • 0
نشر
  بتاريخ On 28‏/3‏/2025 at 13:05 قال عزوز عزوز2:

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

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

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

أظهر المزيد  

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

  • 0
نشر
  بتاريخ On 28‏/3‏/2025 at 04:16 قال ياسر مسكين:

عندما يكون 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؟

  • 0
نشر
  بتاريخ On 28‏/3‏/2025 at 19:21 قال Abdualzeez-moh:

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

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

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

أظهر المزيد  

عليك تغيير path/media إلى مسار مجلد media

RewriteEngine On

RewriteRule ^media/(.*)$ /path/media/$1 [L]

RewriteRule ^(?!media/).*\.py$ - [F]

Options -Indexes

 

  • 0
نشر
  بتاريخ On 8‏/4‏/2025 at 02:47 قال Mustafa Suleiman:

عليك تغيير path/media إلى مسار مجلد media

RewriteEngine On

RewriteRule ^media/(.*)$ /path/media/$1 [L]

RewriteRule ^(?!media/).*\.py$ - [F]

Options -Indexes

 

أظهر المزيد  

اخي مصطفى هذا الموجود في ملف htaccess
 

# Enable Rewrite Engine
RewriteEngine On
RewriteBase /

# =======================
# Serve media files
# =======================
RewriteCond %{REQUEST_URI} ^/media/
RewriteCond %{DOCUMENT_ROOT}/../cyberz/cyberzwebsite/cyberz_website%{REQUEST_URI} -f
RewriteRule ^media/(.*)$ ../cyberz/cyberzwebsite/cyberz_website/media/$1 [L]

# =======================
# Serve static files
# =======================
RewriteCond %{REQUEST_URI} ^/static/
RewriteCond %{DOCUMENT_ROOT}/../cyberz/cyberzwebsite/cyberz_website%{REQUEST_URI} -f
RewriteRule ^static/(.*)$ ../cyberz/cyberzwebsite/cyberz_website/static/$1 [L]

 

  • 0
نشر
  بتاريخ On 9‏/4‏/2025 at 20:47 قال Abdualzeez-moh:

اخي مصطفى هذا الموجود في ملف htaccess
 

# Enable Rewrite Engine
RewriteEngine On
RewriteBase /

# =======================
# Serve media files
# =======================
RewriteCond %{REQUEST_URI} ^/media/
RewriteCond %{DOCUMENT_ROOT}/../cyberz/cyberzwebsite/cyberz_website%{REQUEST_URI} -f
RewriteRule ^media/(.*)$ ../cyberz/cyberzwebsite/cyberz_website/media/$1 [L]

# =======================
# Serve static files
# =======================
RewriteCond %{REQUEST_URI} ^/static/
RewriteCond %{DOCUMENT_ROOT}/../cyberz/cyberzwebsite/cyberz_website%{REQUEST_URI} -f
RewriteRule ^static/(.*)$ ../cyberz/cyberzwebsite/cyberz_website/static/$1 [L]
 

 

أظهر المزيد  

هل تأكدت من أن المسار الموجود في الملف صحيح ؟

يرجى إستبدال الكود الموجود بالملف بالكود التالي :

# Enable Rewrite Engine
RewriteEngine On
RewriteBase /

# =======================
# Serve media files
# =======================
RewriteCond %{REQUEST_URI} ^/media/
RewriteCond /full/path/to/your/project/media/%{REQUEST_URI} -f
RewriteRule ^media/(.*)$ /full/path/to/your/project/media/$1 [L]

# =======================
# Serve static files
# =======================
RewriteCond %{REQUEST_URI} ^/static/
RewriteCond /full/path/to/your/project/static/%{REQUEST_URI} -f
RewriteRule ^static/(.*)$ /full/path/to/your/project/static/$1 [L]

وتأكد من إستخدام المسار المطلق للملفات لديك مباشرة حيث يرجى إستبدال المسار full/path إلى المسار الكامل لديك في الإستضافة.

والأفضل هو عدم إستخدام htaccess ولكن وضع ذلك مباشرة في إعدادات appache . لذلك يرجى الذهاب إلى إعدادات Apache في المسار الخاص به وهو شئ كالتالي :

etc/apache2/sites-available

ويرجى فتح إعدادات الموقع الموجودة في المسار السابق وهي موجود في ملف بإسم كالتالي "default.conf" حسب اسم مشروعك . وإضافة الكود التالي به :

Alias /media/ /full/path/to/your/project/media/
<Directory /full/path/to/your/project/media/>
    Require all granted
</Directory>

Alias /static/ /full/path/to/your/project/static/
<Directory /full/path/to/your/project/static/>
    Require all granted
</Directory>

مع التأكد من استبدال /full/path/to/your/project/ بالمسار الكامل لديك هكذا مثلا :

/home/user/cyberz/cyberzwebsite/cyberz_website/

 

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...