我在模板中提供管理员上传文件时遇到问题。
我设置:
MEDIA_URL='/media/'
MEDIA_ROOT = 'assets/'
我的模特就像:
mainPhoto = models.ImageField(upload_to="articles/")
在我的模板中,我尝试:
<img src="{{MEDIA_URL}}{{article.mainPhoto}}" />
图片未显示在网站上。
我发现了django .serve()
的一个弃用解决方案,但我希望避免使用它。
我到处寻找并没有找到任何答案,所以我希望有人能够帮助我。
答案 0 :(得分:2)
这项工作有两个部分。首先是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不同的东西,则此方法将会中断。存储后端找出网址总是一个好主意:
<img src="{{article.mainPhoto.url}}" />