静态 - 图像渲染在 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%}
我知道可能有更简洁的方法来执行此操作。希望有人仍会添加到此线程以供将来使用。感谢所有提供帮助的人。
我是 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%}
我知道可能有更简洁的方法来执行此操作。希望有人仍会添加到此线程以供将来使用。感谢所有提供帮助的人。