在Django中显示存储在数据库中的图像

10

我只想通过网页上的HTML图片标签显示我通过管理模块上传的图片。图片位于/home/user/work/djcode/media/chicks/blondie.jpg。

以下是我models.py文件中相关的部分:

class Image(models.Model):
    model_name = models.CharField(max_length=50)
    model_pic = models.ImageField(upload_to='chicks/')
def __unicode__(self):
    return self.model_name

这是我的views.py文件中相关部分的内容。

def main(request):
    i = get_object_or_404(Image, pk=1)
    return render_to_response('polls/main.html', {'image': i}, context_instance=RequestContext(request))

我正在使用的 HTML 标签很简单

<img src="{{ MEDIA_ROOT }}/{{ image.model_pic.url }}">

从settings.py来看,我的媒体根目录是MEDIA_ROOT = '/home/user/work/djcode/media'

请注意,变量{{ image.model_pic.url }}通过html模板显示为"chicks/blondie.jpg",所以我认为我的image对象确实已经被正确地传递到了模板中。

有人能帮帮我吗?那将非常有帮助。

非常感谢您的时间!

3个回答

15

你在模板中使用图像字段的url函数时有点错误 - {{ image.model_pic.url }}应该可以解决问题。你只需要删除{{ MEDIA_URL }}这部分即可。

你的html应该是这样的 -

<img src="{{ image.model_pic.url }}">

请查看使用模型中的文件文档。

如果你仍然遇到问题,这可能是关于静态文件服务的问题。在 Django 中提供静态文件服务取决于您是在生产环境下操作还是使用python manage.py runserver命令。

要在开发过程中(使用 python manage.py runserver)提供媒体文件服务,请确保您的 settings.py 文件中 MEDIA_URL 和 MEDIA_ROOT 配置正确,然后将以下内容附加到您的 url conf 中 -

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = patterns('',
    # ... the rest of your URLconf goes here ...
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

请查看文档,了解如何在生产环境中提供文件的指导。


1

您需要使用{{MEDIA_URL}}{{STATIC_URL}},选择取决于您在服务器上如何管理文件。如果您使用{{STATIC_URL}},这是最佳选择。


1
尝试做以下操作:
from django.conf import settings
from django.conf.urls.static import static
from . import views

urlpatterns = [
            .....
] + static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接