在Django中显示位于数据库中的图像

时间:2013-02-03 18:27:12

标签: python html database django image

我只想通过网页上的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 个答案:

答案 0 :(得分:7)

您在模板中的图片字段上使用网址功能并不完全正确 - {{ image.model_pic.url }}应解决此问题。您只需要删除{{ MEDIA_URL }}位。

你的HTML应该是 -

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

查看using files in models上的文档。

如果您仍然遇到问题,那么serving static files.可能会出现问题。在django中提供静态文件会有所不同,具体取决于您是在生产中还是仅使用python manage.py runserver命令。< / p>

要在开发期间服务器媒体文件(使用python manage.py runserver),请确保您的settings.py中的MEDIA_URL和MEDIA_ROOT正确无误,然后您可以将以下内容附加到您的网址 -

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)

有关如何在生产中提供文件的说明,请查看docs

答案 1 :(得分:1)

您需要使用{{MEDIA_URL}}或{{STATIC_URL}},选择取决于您在服务器上管理文件的方式。

答案 2 :(得分:0)

尝试执行以下操作:

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)