Django 在 debug = False 时找不到我的媒体文件夹

Posted

技术标签:

【中文标题】Django 在 debug = False 时找不到我的媒体文件夹【英文标题】:Django cannot find my media folder while debug = False 【发布时间】:2018-06-05 15:25:20 【问题描述】:

我有一个运行良好的 django 项目,当debug = True 时显示从管理员上传的所有媒体文件,但我立即将更改为debug = False django 找不到我的媒体文件夹,但它加载了我的静态文件夹。如您所见,我已经正确设置了MEDIA_ROOTMEDIA_URL

这也是我的urls.py 配置

在控制台日志中,我发现我的图像输出 404 错误,而我可以清楚地看到一个媒体文件夹存在我的目录中的图像

谁能帮我指出我做错了什么或者为什么 django 找不到我的媒体文件夹?

【问题讨论】:

你能把代码写成文本吗?图片很难使用。 Python Django media url not working after setting DEBUG = True的可能重复 这个问题不是参考的重复,因为我的问题是相反的。我的网站正在开发中,但是当debug = False 时找不到我在媒体文件夹中上传的图片 +static 仅用于调试/开发模式。我相信您可以通过设置 STATIC_URL 并进行 collectstatic 来修复它。但是我并没有靠近我的常规工作空间来确定这一点。如果你不明白,我稍后再看。 我已经做了 collectstatic 并加载了正常的 css 和图像,但没有找到媒体文件夹中上传的图像 【参考方案1】:

Django 不会在生产模式下处理静态文件,您需要调用 ./manage.py collectstatic 并将收集到的静态文件提供给您的 django 应用前端的 Web 服务器。

或者使用--insecure 选项运行你的开发服务器。 https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#cmdoption-runserver-insecure

【讨论】:

【参考方案2】:

您可以查看此答案Media files not showing on Debug False ("您看到的行为是设计使然,Django 不在生产模式下提供静态文件。使用 Python 提供许多潜在的巨大静态文件会给服务器,而任何普通服务器都可以轻松处理。”)

否则,如果我是对的,那么您希望将您的网站托管在服务器上。 一旦将 debug = True 设置为 False,Django 就不再自己处理静态文件。现在,它是处理静态文件的服务器。当我将我的 django 项目上传到 pythonanywhere 时,我遇到了这个问题。为了解决这个问题,你必须明确告诉服务器你的静态文件所在的位置:

【讨论】:

最好不要单独发布链接 - 而是在您的答案中包含链接中的基本信息。【参考方案3】:

问题是你还没有准备好部署你的网站,如果不是这样,你应该先找到一种方法来服务器你的网站,而不是简单地运行 manage.py runserver,这不切实际。

部署 django 网站的一个好方法是使用 Apache2 和 mod_wsgi,在这种情况下,您需要使用 apache 服务器的 httpd.conf 文件进行一些配置,而 apache2 将负责提供文件(静态、媒体)。

httpd.conf 看起来像这样,还要确保检查 django 文档。

serving-uploaded-files-in-development

serving-file-in-production

Alias /robots.txt /path/to/mysite.com/static/robots.txt
Alias /favicon.ico /path/to/mysite.com/static/favicon.ico

Alias /media/ /path/to/mysite.com/media/
Alias /static/ /path/to/mysite.com/static/

<Directory /path/to/mysite.com/static>
Require all granted
</Directory>

<Directory /path/to/mysite.com/media>
Require all granted
</Directory>

WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py

<Directory /path/to/mysite.com/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>

如果您还没有准备好部署您的网站,则不应将 debug 设置为 false。

【讨论】:

【参考方案4】:

注意所有页面都需要包含:

% load static %

您必须配置 Apache 以提供媒体文件。

您不应该将 collectstatic 用于您的媒体目录。从 STATICFILES_DIRS 中删除 '/home/admin/webapps/mainfolder/mainapp/media',然后设置

MEDIA_ROOT = '/home/admin/webapps/mainfolder/mainapp/media'

完成此操作后,静态(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 应该在DEBUG = True 时提供媒体文件。

对于DEBUG = False

【讨论】:

感谢您的回复,媒体文件在debug = True 时已加载,但当我将其转为false 时,找不到图像。换句话说,在开发中它可以工作,但在生产中它不会加载图像

以上是关于Django 在 debug = False 时找不到我的媒体文件夹的主要内容,如果未能解决你的问题,请参考以下文章

使用 DEBUG=False,我如何将 django 异常记录到日志文件中

Django 无法识别 DEBUG = False

在 Django Web 应用程序中设置 DEBUG=False 时出错

Django 中 DEBUG = True 和 False 之间的功能区别是啥?

Django 中 DEBUG = True 和 False 之间的功能区别是啥?

Django3.0:来自数据库的图像在 debug=False 后未显示