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

10 投票
3 回答
31053 浏览
提问于 2025-04-17 14:37

我想在网页上显示一个我通过管理模块上传的图片,使用的是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",所以我觉得我的图片对象确实已经正确传递到模板中了。

有没有人能帮我一下?这会非常有帮助。

非常感谢你的时间!

3 个回答

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)
1

你需要使用 {{MEDIA_URL}}{{STATIC_URL}},具体用哪个取决于你在服务器上是怎么管理文件的。如果你使用 {{STATIC_URL}},那是最好的选择。

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配置中添加以下内容 -

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)

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

撰写回答