[英]Django serving dynamic Files
我在模板中提供有关管理员上传的文件时遇到问题。
我设置:
MEDIA_URL='/media/'
MEDIA_ROOT = 'assets/'
我的模型是这样的:
mainPhoto = models.ImageField(upload_to="articles/")
在模板中时,我尝试:
<img src="{{MEDIA_URL}}{{article.mainPhoto}}" />
该图片未显示在网站上。
我使用django .serve()
找到了一个已弃用的解决方案,但我希望避免使用它。
我到处都是,没有找到任何答案,所以希望这里有人可以帮助我。
有两个部分可以使这项工作。 首先是Django配置。 您实际上已经提到了两个设置MEDIA_URL
和MEDIA_ROOT
。 正如评论中已经指出的, MEDIA_ROOT
必须是绝对路径。 例如:
MEDIA_ROOT = `/abs/path/to/project/media/`
第二部分实际上是提供文件。 如果您正在生产中,则永远不要通过Django提供静态文件或媒体文件,因此应配置Apache或nginx或用于提供文件的任何服务器系统(而不是Django)。 另一方面,如果您仍在开发应用程序,则有一种简单的方法可以使Django提供媒体文件。 这个想法是修改您的urls.py
并使用Django的静态文件服务器来提供媒体文件:
# urls.py
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = patterns('',
# other patterns
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
有关此方法的更多信息,请参阅Django docs 。
同样,仅供参考,您可能不应该使用{{MEDIA_URL}}{{article.mainPhoto}}
获取图像的网址。 例如,如果您不再将文件系统存储用于静态文件,并且将切换到诸如Amazon S3之类的其他方式,该方法将失效。 对于存储后端来说,找出URL总是一个好主意:
<img src="{{article.mainPhoto.url}}" />
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.