【发布时间】:2018-08-27 11:17:40
【问题描述】:
我遇到了用户上传的内容没有显示在网页上的问题。我在使用我的开发 settings.py 文件时可以 100% 工作,但这在我的实时站点上不起作用。
一些注意事项
- 我的静态文件在我的实时网站上 100% 正常工作。
- 当用户在我的实时网站上上传内容时,文件会发布到正确的文件夹(即我在 settings.py 文件中指定的文件夹)
- 在呈现网页并调查损坏的链接时,对我来说,链接看起来是正确的。换言之,图片存在于所指示的链接中。
这是我在 settings.py 中的媒体设置:
MEDIA_URL = '/media/'
MEDIA_ROOT = '/home/jasonhoward/webapps/site_media/'
如果用户上传 cat.jpg,我已经确认它成功保存到 '/home/jasonhoward/webapps/site_media/'
现在,当用户导航到其个人资料上的图片库时,应该会出现猫的图片。相反,会出现一个断开的链接。根据 Chrome Inspect 工具,图片的地址是“/media/cat.jpg”。
对我来说,链接地址似乎是正确的,并且应该显示图像。几乎就像文件路径是正确的,但是系统出于某种原因限制了对该图像的访问。这可能吗?
我唯一能想到的另一件事是,在主 urls.py 文件中,我有以下代码:
if settings.DEBUG:
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
调试模式在生产中设置为 False。我尝试删除“if settings.DEBUG”行,但这不会改变任何行为。
我应该提到我的静态文件是这样设置的:
STATIC_URL = '/static/'
STATIC_ROOT = '/home/jasonhoward/webapps/site_static/'
STATICFILES_DIRS = (os.path.join(BASE_DIR, 'assets', 'our_static'),)
当我访问 www.mysite.com/static/images/car.jpg 时,汽车图像会加载到浏览器中。结果,我对为什么媒体文件不起作用感到困惑......
谢谢
【问题讨论】:
-
大概你在生产中配置了一些东西来提供静态文件。您需要对媒体文件执行相同操作。
-
我的理解是,由于 settings.py 文件中的 MEDIA_ROOT 声明,媒体文件应该从“/home/jasonhoward/webapps/site_media/”上传到网页并提供给网页。一个声明似乎适用于我的开发环境。
-
上传到那里,是的。但是什么在为他们服务?正如我所说,为了让静态文件正常工作,您必须配置您的 Web 服务器来为它们提供服务。您也需要对媒体文件执行此操作。
-
@JasonHoward 它可以在您的开发环境中使用,因为您拥有
urlpatternsif settings.DEBUG。您没有提供生产环境的详细信息,但您必须将其配置为在/home/jasonhoward/webapps/site_media//media提供文件。 -
@Paulo Almeida 如果“if settings.Debug”导致问题,为什么常规静态文件而不是生产中的媒体文件可以工作?