【问题标题】:Django can't show images on pageDjango 无法在页面上显示图像
【发布时间】:2015-05-17 16:19:22
【问题描述】:

我正在拼命地尝试在 Django 的帮助下从我的数据库中加载一些图像。 加载似乎可行,但从数据库中取回它们并在网页上显示它们似乎不起作用。

这里有一些信息:

环境:

我的项目 |_forpix(我的应用) |_我的项目 |_媒体 |_图片 |_mimicry3.png

我有一个 base.html,其中包含一个内容块“allimages.html”:

{% extends "base.html" %}
{% block content %}
<div id="imagelist">
    {% for image in images %}
    <p><img src="{{MEDIA_ROOT}}{{image.picture.url}}" />{{ image }}</p>
    {% endfor %}
</div>

{% endblock %}

这给了我以下结果:

如果我点击我得到的图像之一:

在我的 settings.py 中,我设置了以下内容:

STATIC_URL = '/static/'

MEDIA_URL = '/media/'

MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')

TEMPLATE_DIRS = (os.path.join(BASE_DIR, 'templates/'),)

现在我真的不知道如何解决这个问题。 谁能给我一些帮助(不是django教程,我去过那里,试过了)

我是否必须在 urls.py 中添加一些内容,尤其是对于媒体文件?还是别的什么?

如果我需要提供额外信息,请尽管询问。

【问题讨论】:

  • 您是否在模板的顶层添加了{% load staticfiles %}
  • @Kasra 尝试添加它,但没有改变任何东西。
  • 使用{{ STATIC_URL }} 而不是{{MEDIA_ROOT}}

标签: python django http-status-code-404


【解决方案1】:

^media/$ 是一个非常错误的媒体文件正则表达式。您应该从此正则表达式中删除 $ (end-of-the-string) 符号。

通常对于开发环境,我在urls.py 中使用这个sn-p:

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = patterns('',
    ...
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

还要从模板代码中删除无用的{{ MEDIA_ROOT }} 部分。应该是:

<img src="{{ image.picture.url }}" />

【讨论】:

  • @catavaran 我删除了 urls.py 中的媒体正则表达式并添加了 + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) ,但这给了我一个 NameError 说 name 'static' is not defined
  • 哦,对不起。但它似乎有效,你能解释一下刚刚发生了什么变化吗?
  • $end-of-the-string 特殊字符。所以与^media/$ 正则表达式匹配的唯一字符串是"media/"。所有其他媒体 url 与此正则表达式不匹配。 docs.python.org/2/library/re.html#regular-expression-syntax
  • 其实我希望你能解释一下 static(...) 行。我对正则表达式有基本的了解(但似乎总是犯那些愚蠢的错误)
  • 这里描述了使用 static() 帮助器提供媒体文件:docs.djangoproject.com/en/1.7/howto/static-files/…
【解决方案2】:

此外,您必须添加的行是..

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = patterns('',
    ...
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

但它必须在项目文件夹的 urls.py 中。不在您的 App 文件夹的 urls.py 中。我是误会了。

【讨论】:

    猜你喜欢
    • 2021-07-14
    • 2018-07-12
    • 1970-01-01
    • 2015-05-06
    • 2018-11-13
    • 2019-02-21
    • 2021-06-27
    • 2020-02-17
    • 2019-10-01
    相关资源
    最近更新 更多