[英]Django 1.10 media (FileField) 404
我的第一个问题,所以轻松点。 我会尽可能详细。
我的设定
问题和我尝试过的
问题是我撤回了最近在本地运行良好的提交,突然之间以前渲染良好的模型图像都无法正常工作-我正在为所有图像获取404。 我尝试了以下方法:
sudo systemctl restart gunicorn
) python manage.py shell
访问对象并检查它们是否仍与文件的URL相关联 我的代码在本地运行时有效-没有上传的图像/文件引起404错误。 与我的生产环境一样, logos
文件夹位于项目的主目录中,而不是附加到media
文件夹中(其他答案和django文档建议的情况是这样-尽管这可能是一条红色的鲱鱼)。
我的浏览器控制台显示404,即使它已存储(已检查文件结构)在<project_folder>/logos/<filename>
,它仍试图从<domain.com>/media/logos/<filename>
获取。 <project_folder>/logos/<filename>
(即没有media
文件夹),但这以前从来都不是问题。 同样,在本地也是如此,但是完全可以。
我的代码和东西
在我的models.py中,我有以下字段:
class Thing(models.Model):
...
logo = models.FileField(upload_to='logos/', blank=True)
...然后我使用以下代码将其呈现在HTML文件中:
<img class="..." src="{{ thing.logo.url }}>
...这就是Django文档说的做到这一点的方法(而不是硬编码URL)。 我在文档中读到,该文件作为对象的一部分存储在数据库中,因此使用文件名引用文件路径不一定有效(或类似的操作),因此这是最佳选择。
据我所知,我的网址设置良好:
urlpatterns = [
...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
在settings.py中,没有文件路径或URL被硬编码:它们都是相对于os.path...
。
MEDIA_URL = '/media/'
并且未设置MEDIA_ROOT
(默认为'')
我想不出任何其他有用的信息,但是如果有的话让我知道。 请帮忙! 我目前有一个带有难看的alt-text的实时网站:(
静态(...)仅在开发中有效。 在生产中,您应该配置服务器(例如Apache或Nginx)来提供文件。 请参阅Apache和modwsgi的示例。 –阿拉斯代尔1月9日22:12
感谢@Alasdair的上述评论-不幸的是,我无法将其标记为答案,但导致了它。
我没有设置Nginx来处理媒体文件-仅处理静态文件。 所以我的Nginx conf文件现在看起来像这样:
location /static/ {
root /home/<path>/<to>/<folder>;
}
location /media/ {
root /home/<path>/<to>/<folder>;
}
然后,我的Django应用程序将文件上传到一个稍微意外的位置,因此我不得不将这些文件复制到正确的媒体文件位置,并设置正确的位置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.