【问题标题】:Display image from model to template Django从模型显示图像到模板 Django
【发布时间】:2012-06-05 17:39:55
【问题描述】:

图片可以上传到位于 mysite 文件中的“upload”文件,这是我的代码 设置.py

MEDIA_ROOT = 'C:/Python26/mysite/upload/media/'
MEDIA_URL = '/media/'

在 url.py 中

urlpatterns = patterns('',

   url(r'^media/(?P<path>.*)$', 'django.views.static.serve',
            {'document_root': settings.MEDIA_ROOT,}),
)

在模板中

 <img src="{{MEDIA_URL}}/{{pic}}" alt="Profile Picture" width="200"/>

但是,图片仍然没有显示在网站上,但它确实存储在上传文件中。有人可以帮我吗?谢谢

【问题讨论】:

  • 当你的html渲染时src的值是多少?
  • 它是
  • 图片的正确位置
  • /upload/Desert.jpg 不对,应该是/media/Desert.jpg

标签: django image templates


【解决方案1】:

给定:

MEDIA_URL = '/media/'

以及以下模板代码:

<img src="{{MEDIA_URL}}/{{pic}}" alt="Profile Picture" width="200"/>

图像src 不可能是/upload/Desert.jpg。路径应以/media/ 开头。 MEDIA_URL 很可能是未定义的,pic 的值是 upload/Desert.jpg。如果是这种情况,那么您可能缺少媒体模板上下文处理器。将TEMPLATE_CONTEXT_PROCESSORS 更改为:

TEMPLATE_CONTEXT_PROCESSORS = (
    ...
    'django.core.context_processors.media',
)

这将使MEDIA_URL 在您的模板上下文中可用。然后,您还需要删除它后面的斜线,否则您将得到两个(MEDIA_URL 以斜线结尾),即:

代替:

{{ MEDIA_URL }}/{{ pic }}

用途:

{{ MEDIA_URL }}{{ pic }}

更新

如果您仍然没有获得MEDIA_URL 的值,那么您可能没有使用RequestContext。您必须将视图的上下文包装在 RequestContext 中,以便模板上下文处理器执行其操作。

如果您使用的是render_to_response,那么:

return render_to_response('template.html', { ... context here ... }, context_instance=RequestContext(request))

如果您使用的是 Django 1.3+,您可以使用 render 方法,它会自动为您执行此操作:

return render('template.html', { ... context here ... })

【讨论】:

  • 我这样做了,但结果出来了
  • 谢谢:) 我认为 {{ MEDIA_URL }} 是上传/,我想知道 MEDIA_ROOT = 'C:/Python26/mysite/upload/media/' 有什么问题,但我可以想不通
  • 看起来MEDIA_URL 仍未定义。唯一可能的问题是您没有使用RequestContext。请参阅上面的更新。
  • 我使用的是 Django1.4,我将代码更改为 render('template.html', { ... context here ... })
  • {% debug %} 添加到您的模板并检查模板上下文(如果您在页面上查看源代码会更容易)。如果MEDIA_URL 不存在(肯定不会存在)并且您正在使用render,那么它会返回到TEMPLATE_CONTEXT_PROCESSORS。确保它实际上是你认为的那样。您可能想尝试python manage.py shell,然后从那里运行from django.conf import settingssettings.TEMPLATE_CONTEXT_PROCESSORS,看看它的真正设置。
【解决方案2】:

在设置中,这对我不起作用,

TEMPLATE_CONTEXT_PROCESSORS = (
    ...
    'django.core.context_processors.media',
)

我用django.template....代替django.core....

TEMPLATE_CONTEXT_PROCESSORS = (
    ...
    'django.template.context_processors.media',
)

【讨论】:

    猜你喜欢
    • 2020-09-21
    • 2016-12-13
    • 1970-01-01
    • 2013-02-16
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    相关资源
    最近更新 更多