1

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

我设置:

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

我的模型是这样的:

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

在我的模板中,我尝试:

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

图片没有显示在网站上。

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

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

4

1 回答 1

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文档

另外仅供参考,您可能不应该使用{{MEDIA_URL}}{{article.mainPhoto}}来获取图像的 url。例如,如果您不再将文件系统存储用于静态文件并且将切换到不同的东西,例如 Amazon S3,这种方法就会失效。存储后端找出 url 总是一个好主意:

<img src="{{article.mainPhoto.url}}" />
于 2013-09-29T04:27:06.757 回答