在Django中显示存储在数据库中的图像
我想在网页上显示一个我通过管理模块上传的图片,使用的是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 个回答
试试下面这个方法:
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)
你需要使用 {{MEDIA_URL}}
或 {{STATIC_URL}}
,具体用哪个取决于你在服务器上是怎么管理文件的。如果你使用 {{STATIC_URL}}
,那是最好的选择。
你在模板中使用的图片字段的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)
查看文档,了解如何在生产环境中提供文件的说明。