我无法在模板中显示图片。这是我的代码:
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" />
如何正确显示图像?
答案 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" />
查看ImageField和serving static files上的文档。
保存模特(带照片)时,照片会上传到<MEDIA_ROOT>/<upload_to>
。然后通过http://localhost:8000/<MEDIA_URL>/<upload_to>
的http提供服务。但是,由于您要将照片保存在模型中,因此数据库会保留对文件位置的引用,以便您使用<img src="{% object.photo.url %}">
加载图像。