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

use*_*635 6 html python 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
Run Code Online (Sandbox Code Playgroud)

这是我的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))
Run Code Online (Sandbox Code Playgroud)

我正在使用的html标签很简单

<img src="{{ MEDIA_ROOT }}/{{ image.model_pic.url }}">
Run Code Online (Sandbox Code Playgroud)

来自settings.py,我的媒体根是MEDIA_ROOT ='/ home/user/work/djcode/media'

请注意,变量{{image.model_pic.url}}通过html模板显示"chicks/blondie.jpg",所以我认为我的图像对象确实很好地发送到了模板.

有人可以帮我一把吗?那会非常有帮助.

非常感谢你的时间!

Aid*_*wen 8

您在模板中的图像字段上使用url函数不太正确 - {{ image.model_pic.url }}应该解决问题.你只需要放弃{{ MEDIA_URL }}一下.

你的HTML应该是 -

<img src="{{ image.model_pic.url }}">
Run Code Online (Sandbox Code Playgroud)

查看有关在模型中使用文件的文档.

如果您仍然遇到问题,那么提供静态文件可能会出现问题.在django中提供静态文件取决于您是在生产中还是仅使用python manage.py runserver命令.

要在开发期间服务器媒体文件(使用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)
Run Code Online (Sandbox Code Playgroud)

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


小智 1

您需要使用{{MEDIA_URL}}{{STATIC_URL}},选择取决于您如何管理服务器上的文件。如果你用{{STATIC_URL}}这个是最好的。