我的第一个问题,所以放轻松。我会尽可能详细地说明。
我的设置
问题和我尝试过的事情
问题在于我提取了一个最近在本地运行良好的提交,突然之前没有一个模型的图像,以前变得很好,正在工作 - 我得到所有这些的404。我尝试了以下内容:
sudo systemctl restart gunicorn
)python manage.py shell
访问对象并检查它们是否仍与文件的URL相关联我的代码在本地运行时有效 - 没有上传的图像/文件导致404s。与我的生产环境一样,logos
文件夹位于我的项目的主目录中,而不是附加到media
文件夹(其他答案和django文档建议的情况也是如此 - 这可能虽然是红鲱鱼。
我的浏览器控制台显示404并且它正试图从<domain.com>/media/logos/<filename>
获取,即使它们已在<project_folder>/logos/<filename>
中存储(我已经检查了文件结构)(即没有{{1}文件夹),但这从来没有问题。同样,在本地情况也是如此,但完全没问题。
我的代码和内容
在我的 models.py 中,我有这个字段:
media
...然后我在我的HTML文件中使用:
进行渲染class Thing(models.Model):
...
logo = models.FileField(upload_to='logos/', blank=True)
......这也是django docs所说的(而不是硬编码URL)。我在文档中读到文件存储为数据库中对象的一部分,因此引用带文件名的文件路径不一定有效(或类似),因此这是最佳选择。
据我所知,我的网址设置得很好:
<img class="..." src="{{ thing.logo.url }}>
...按照this answer(可能还有其他人)。
在 settings.py 中,没有文件路径或网址是硬编码的:它们都与urlpatterns = [
...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
相关。
os.path...
和MEDIA_URL = '/media/'
未设置(默认为'')
我想不出任何其他有用的信息,但如果有,请告诉我。请帮忙!我目前有一个丑陋的替代文字的实时网站:(
答案 0 :(得分:0)
静态(...)仅适用于开发。在生产中,您应该配置服务器(例如Apache或Nginx)来提供文件。请参阅Apache和modwsgi的示例。 - Alasdair Jan 9 at 22:12
感谢@Alasdair对您的上述评论 - 不幸的是我无法将其标记为答案,但却导致了这一点。
我没有设置Nginx来处理媒体文件 - 只有静态文件。所以我的Nginx conf文件现在看起来像这样:
location /static/ {
root /home/<path>/<to>/<folder>;
}
location /media/ {
root /home/<path>/<to>/<folder>;
}
我的Django应用程序然后将文件上传到一个意想不到的位置,所以我不得不将这些文件复制到正确的媒体文件位置并设置正确。