【问题标题】:Django 3.1 not serving media files correctlyDjango 3.1 未正确提供媒体文件
【发布时间】:2021-03-02 06:13:58
【问题描述】:

我有一个在 Django 3.1 中运行的项目,但它突然开始无法提供媒体文件(用户上传的静态文件),即使我没有更改 settings.py 或其他地方的任何内容。

我的主要 urls.py:

from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('admin/', admin.site.urls),
    path('cart/', include('cart.urls', namespace='cart')),
    path('', include('contacts.urls', namespace='contacts')),
    path('customers/', include('customers.urls', namespace='customers')),
    path('orders/', include('orders.urls', namespace='orders')),
    path('account/', include('account.urls')),
    path('', include('catalog.urls', namespace='catalog')),
]

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

来自我的 settings.py:

from pathlib import Path
import os

# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath( os.path.join(__file__, os.pardir))))
DEBUG = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.1/howto/static-files/

STATIC_ROOT = os.path.join(BASE_DIR, 'static/')

STATIC_URL = '/static/'

STATICFILES_DIRS = ( os.path.join('static'), )

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

我不知道也无法弄清楚错误出在哪里,但 runserver 在尝试加载媒体文件时总是抛出 404,即使静态文件 (CSS/JS) 正在正确提供。

【问题讨论】:

  • 文件是否存在于 BASE_DIR/media/ 目录中?
  • 是的。我检查了他们是否在那里,而且他们一直都在。上次我启动开发服务器时,它们得到了正确的服务,

标签: python django django-views django-templates


【解决方案1】:

您的网址看起来不错,尽管我注意到您缺少 from django.contrib import admin。 关于您的设置,这是我的,对我来说很好用。

如果settings.py 不存在,请将import os 添加到您的settings.py

【讨论】:

    猜你喜欢
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-29
    • 2016-09-03
    相关资源
    最近更新 更多