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

时间:2016-01-19 03:33:19

标签: django django-models django-forms django-templates django-views

我是Django的初学者,我遇到的问题是从数据库中呈现图像网址的模板。我的其他图像的图像路径工作正常。硬编码也可以很好地渲染我的其他图像.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错误中看到的那样,“波浪形括号”未被处理。

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

{{m.image}}

数据库中保存的URL返回保存在数据库中的图像路径。我在我的模型中使用了ImageField()。

my 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”

任何帮助或建议将不胜感激。提前致谢。

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:0)

我实际上在文档中找到了对我有用的答案。这是一个链接,以防万一有人想要查看它。

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

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

在这两个链接之间,我能够提出这个并且它有效:

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

我知道可能有更简洁的方法来做到这一点。希望有人仍会添加到此主题以供将来使用。感谢所有提供帮助的人。