Django Media url 返回 404 NOT FOUND

Posted

技术标签:

【中文标题】Django Media url 返回 404 NOT FOUND【英文标题】:Django Media url returns 404 NOT FOUND 【发布时间】:2017-07-01 05:35:05 【问题描述】:

我有一个 django 项目。 为了设置我的媒体网址,我关注了 django doc Django doc - Managing static files:

例如,如果您的 MEDIA_URL 被定义为 /media/,您可以通过将以下 sn-p 添加到您的 urls.py 来做到这一点:

从 django.conf 导入设置 从 django.conf.urls.static 导入静态

urlpatterns = [ # ... URLconf 的其余部分在这里... ] + 静态(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

我的settings.py

# ....
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
BASE_URL = 'http://127.0.0.1:8000'
# ...
MEDIA_URL_REL = '/media/'
MEDIA_URL = BASE_URL + MEDIA_URL_REL
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')

我的 urls.py

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

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

我上传的文件在媒体根目录中找到,但是当我访问媒体 url [http://127.0.0.1:8000/media/proof/img.pdf] 时,它返回 HTTP 404 NOT FOUND

【问题讨论】:

你设置DEBUG = True了吗? 是的,我有'DEBUG = True' 尝试打印 BASE_DIR 并检查 BASE_DIR/media 是否是您的实际媒体目录 你为什么使用BASE_URL @Darshan:我做到了,他们还好 【参考方案1】:

请不要使用硬编码的网址。这不仅仅是不好的做法。

BASE_URL = 'http://127.0.0.1:8000'

你不能那样写。

您的解决方案,

settings.py

MEDIA_URL = '/media/'

urls.py

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

希望这可行。

【讨论】:

我已经尝试过这个解决方案,它适用于某些图像,而在其他图像中它返回 404 not found。你知道为什么吗? 我在 Django 1.8 最简单的应用程序中遇到了同样的问题,只有一些静态页面,没有数据库等。媒体加载中没有任何内容。示例:localhost:8000/media/css/bootstrap/bootstrap.min.css - 但是像 localhost:8000/about 这样的页面会加载。

以上是关于Django Media url 返回 404 NOT FOUND的主要内容,如果未能解决你的问题,请参考以下文章

媒体文件上的 404 - Django

Django:MEDIA_URL 返回页面未找到

Django MEDIA_URL 返回 https 而不是 http

当调试关闭时,启用 Django 语言环境的应用程序总是返回 404

为啥 404 在 django url 中?

在 Django Rest Framework 中找不到资源时返回自定义 404 错误