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

时间:2017-12-23 07:11:26

标签: python django python-3.x python-2.7 sorl-thumbnail

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

enter image description here

这里也是我的urls.py配置

enter image description here

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

enter image description here

enter image description here

enter image description here

有人可以帮我指出我做错了什么或为什么django找不到我的媒体文件夹?

5 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

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

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。

答案 2 :(得分:0)

注意所有页面需要包括: {%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。

答案 3 :(得分:0)

我对媒体文件一无所知,可能有点迟了,但是这是当DEBUG = False时如何加载静态文件的方法 1)安装WhiteNoise

pip install WhiteNoise

2)将其放在您的中间件设置中

MIDDLEWARE_CLASSES = [
  'django.middleware.clickjacking.XFrameOptionsMiddleware',
  'whitenoise.middleware.WhiteNoiseMiddleware',
  # ...
]

3)编辑您的wsgi.py

from whitenoise.django import DjangoWhiteNoise

application = get_wsgi_application()
application = DjangoWhiteNoise(application)

4)添加Static_Root(如果您已经拥有)

5)做静电消除

py manage.py collectstatic

是的,你去了。这就是在调试时加载静态文件的方式(您必须为媒体文件找到另一个答案)

答案 4 :(得分:0)

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

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

How to serve static files on pythonanywhere.

相关问题