我有一个非常好的django项目并显示管理员在debug = True
时上传的所有媒体文件但是我立即将更改更改为debug = False
django找不到我的媒体文件夹但它加载了我的静态文件夹。如您所见,我已正确设置MEDIA_ROOT
和MEDIA_URL
这里也是我的urls.py
配置
在控制台日志中,我发现我的图像输出404错误,而我可以清楚地看到我的目录中的图像存在媒体文件夹
有人可以帮我指出我做错了什么或为什么django找不到我的媒体文件夹?
答案 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
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时遇到了这个问题。为了解决该问题,您必须明确告诉服务器静态文件的位置: