Django提供动态文件

时间:2013-09-29 03:34:16

标签: python django

我在模板中提供管理员上传文件时遇到问题。

我设置:

MEDIA_URL='/media/'
MEDIA_ROOT = 'assets/'

我的模特就像:

mainPhoto = models.ImageField(upload_to="articles/")

在我的模板中,我尝试:

<img src="{{MEDIA_URL}}{{article.mainPhoto}}" />

图片未显示在网站上。

我发现了django .serve()的一个弃用解决方案,但我希望避免使用它。

我到处寻找并没有找到任何答案,所以我希望有人能够帮助我。

1 个答案:

答案 0 :(得分:2)

这项工作有两个部分。首先是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不同的东西,则此方法将会中断。存储后端找出网址总是一个好主意:

<img src="{{article.mainPhoto.url}}" />