静态 - 图像渲染在 Django 1.9.1 中返回 HTTP 404 错误

Static - image rendering returning a HTTP 404 error in Django 1.9.1

我是 Django 的初学者,我在使用从数据库渲染图像 url 的模板时遇到问题。我的其他图像的图像路径工作正常。硬编码也可以很好地呈现我的另一个 images.Ex:

<img class="img-responsive logo" src="{% static 'media/images/logo.png' %}" alt="logo" />

但是当我在模板中使用这种格式或硬编码时:

{%for m in users%}
 <img src="{% static 'media/{{m.image}}' %}" alt="{{m}}" />
{%endfor %}

当我检查元素 (chrome) 时,我没有得到渲染的图像和以下错误:

http://127.0.0.1:8000/static/media/%7B%7Bm.image%7D%7D 
Failed to load resource: the server responded with a status of 404 (Not Found)

如您在 404 错误中所见,"squiggly brackets" 未被处理。

我应该注意,当我这样做时:

{{m.image}}

已保存 url 在数据库中 returns 保存在数据库中的图像路径。我在我的模型中使用了 ImageField() 。

我的settings.py

STATIC_URL = '/static/'
STATICFILES_DIRS =    ['/Users/coreygumbs/Documents/Ibhuku/IbhukuProject2/ibhuku/static/',]
STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'static')

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

我的根urls.py

urlpatterns = [
        #HomeView class is the homepage template
        url(r'^$', HomeView.as_view(), name='home'),
        url(r'^admin/', admin.site.urls),
        url(r'^accounts/', include('accounts.urls', namespace='accounts')),
] 

if settings.DEBUG:
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

我的模板代码

{% extends "_profilebase.html" %}
{% load staticfiles %}
{% block profile %}

<div class="accountsProfile">
    {% for m in Users%}
        <h3>{{m}}</h3>
        {{m.first_name}} {{m.last_name}}<br/>
        {{m.username}}<br/>
        {{m.image}}<br/>
        <img src="{% static 'media/{{m.image}}' %}" alt="{{m}}" />
    {% endfor %}
</div>
{% endblock profile %}

我也用过"collectstatic"

如有任何帮助或建议,我们将不胜感激。提前致谢。

您有一些可以使用的模板标签:

Argument         Outputs
openblock          {%
closeblock         %}
openvariable       {{
closevariable      }}
openbrace           {
closebrace          }
opencomment        {#
closecomment       #}

所以你在一个块中有一个变量,首先要知道的是当你在模板标签中使用它们时,不要将括号放在变量周围,问题的解决方案是连接图像名称字符串,即您可以为此使用 add:,像这样:

<img src="{% static "media/"|add:m.image %}" />

我实际上在文档中找到了适合我的答案。这是一个 link 以防万一有人想查看它。

https://docs.djangoproject.com/en/1.9/ref/templates/builtins/#std:templatetag-static

我也找到了这个答案: django 1.5 - How to use variables inside static tag

在这两个 link 之间,我想出了这个并且它起作用了:

{%for user in Users%}
    {%static  "/media/" as image_url %}
    <img class='img responsive' src='{{image_url}}{{user.image}}'/>
{%endfor%}

我知道可能有更简洁的方法来执行此操作。希望有人仍会添加到此线程以供将来使用。感谢所有提供帮助的人。