Django静态模板标签不显示SVG

Posted

技术标签:

【中文标题】Django静态模板标签不显示SVG【英文标题】:Django static templatetag not displaying SVG 【发布时间】:2016-05-18 20:32:16 【问题描述】:

我正在尝试使用 django 的 static 模板标签来显示 SVG,但它似乎无法将 SVG 识别为有效的图像 url。这是我目前拥有的:

settings.py

​​>
import mimetypes
mimetypes.add_type("images/svg+xml", ".svg", True)

landing.html

% load staticfiles %
<img src="% static 'images/right-arrow.svg' %" />

至少在我的 view.py 中,它可以识别 SVG mimetype:

views.py

​​>
print(mimetypes.guess_type(static('images/right-arrow.svg'))) 
  # returns ('images/svg+xml', None)

SVG 确实显示在非 django 页面中,如果我尝试在新的浏览器选项卡中打开 SVG 路径,它将下载 SVG。

我目前正在使用 python 3.4 和 django 1.8.4。

【问题讨论】:

【参考方案1】:

您正在加载静态文件并使用静态文件?

这是错误的。

尝试将% load staticfiles % &lt;img src="% static 'images/right-arrow.svg' %" /&gt; 更改为 % load static % &lt;img src="% static 'images/right-arrow.svg' %" /&gt; 并且您还需要考虑应该在哪个应用程序中找到您的静态文件。

【讨论】:

【参考方案2】:

将此添加到您的 settings.py 文件中。

import mimetypes

mimetypes.add_type("image/svg+xml", ".svg", True)
mimetypes.add_type("image/svg+xml", ".svgz", True)

在您的情况下,您在 add_type 中添加了 images,应该是单数 (image)。

【讨论】:

【参考方案3】:

我遇到了类似的问题。我建议您使用: src=" STATIC_URL images/right-arrow.svg" 而不是 src="% static 'images/right-arrow.svg' %"

svg 格式可能并不总是能识别 django 获取静态文件内容的方法。希望这会有所帮助:)

【讨论】:

【参考方案4】:

我发现了问题。在settings.py 中,应该是mimetypes.add_type('image/svg+xml', '.svg', True)image 应该是单数。

【讨论】:

以上是关于Django静态模板标签不显示SVG的主要内容,如果未能解决你的问题,请参考以下文章

% if % 块中的 Django 模板标签不显示

Django % include % 标签显示硬编码字符串但不可变

Django:条件模板标签内的图像

django之模板显示静态文件

如何为访问控制编写 Django 模板标签?

调试模式打开时的 Django 和静态文件