不显示模板中的图像

时间:2013-02-20 09:41:55

标签: django

我无法在模板中显示图片。这是我的代码:

settings.py

MEDIA_ROOT = os.path.join(DIRNAME, 'media')

MEDIA_URL = ''

STATIC_ROOT = os.path.join(DIRNAME, 'static')

STATIC_URL = '/static/'

# Additional locations of static files
STATICFILES_DIRS = (
    os.path.join(DIRNAME, 'my_static'),
)

在我的模特中:

photo = models.ImageField(upload_to='media/images')

在网站源代码中(在Firefox中使用ctrl + U):

<img class="preview_image" src="static/images/test_1.png" ale="photo" />

如何正确显示图像?

2 个答案:

答案 0 :(得分:1)

像这样更改MEDIA_URL

MEDIA_URL = '/media/'

然后像这样更改upload_to参数:

photo = models.ImageField(upload_to='images')

将此添加到您的urls.py

from django.conf import settings
urlpatterns += patterns('',
    url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT, 'show_indexes': True}),
)

然后在模板中访问上传的图片,如下所示:

<img src="{{ picture.photo.url }}">

答案 1 :(得分:0)

首先更改MEDIA_URL -

MEDIA_URL = '/media/'

然后更改模型上的upload_to参数

photo = models.ImageField(upload_to='images')

将图像文件夹添加到MEDIA_ROOT目录(我不知道它在哪里,因为我不知道你的DIRNAME变量是什么)

/path/to/your/media_root/images

现在,您可以使用 -

在模板中显示照片
{% your_object.photo.url %}

不要在模板中硬编码网址 -

<img class="preview_image" src="static/images/test_1.png" ale="photo" />

应该是 -

<img class="preview_image" src="{% your_object.photo.url %}" ale="photo" />

查看ImageFieldserving static files上的文档。

保存模特(带照片)时,照片会上传到<MEDIA_ROOT>/<upload_to>。然后通过http://localhost:8000/<MEDIA_URL>/<upload_to>的http提供服务。但是,由于您要将照片保存在模型中,因此数据库会保留对文件位置的引用,以便您使用<img src="{% object.photo.url %}">加载图像。