繁体   English   中英

Django提供动态文件

[英]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_URLMEDIA_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM