【问题标题】:Getting svg stored in a variable in jinja2将svg存储在jinja2的变量中
【发布时间】:2015-10-26 16:23:26
【问题描述】:

我正在尝试使用viivakoodi library 获取字母数字编码的条形码。我得到了我需要的条形码,但我无法使用 Jinja2 在我的 HTML 页面中显示它。这是我的代码:

import barcode
from StringIO import StringIO

encoding_std = barcode.get_barcode_class('code128')
ean = encoding_std('Test123')
fp = StringIO()
ean.write(fp)
encoded_output = fp.getvalue()
fp.close()

我目前将条形码存储为 SVG,但无法在 HTML 页面中显示。在 HTML 页面中使用 {{ encoded_ouput | safe }} 来显示条形码并没有显示结果:

<div class="row border-bottom no-margin" style="height: 15%">
    <div class="float-left border-right"
         style="width: 100%; padding: 5px; height: 100%;font-family:arial">
        <p style="font-weight:bold; margin-bottom: 0; font-family:arial; font-size:13px">
            <b>Generated Barcode Space:</b></p><b>
            {{ encoded_output | safe }}

    </b></div>
</div>

或者是否有任何 Jinja2 过滤器来获取 SVG?

【问题讨论】:

  • 你能告诉我们你的 Jinja2 代码吗?一个完整的测试页面就可以了(因此只有用于显示生成的 SVG 的标签)。
  • 另外,您使用的是什么barcode 包? pyBarcode 项目doesn't seem to support that class.
  • 我正在使用 viivakoodi 库,该库的链接pypi.python.org/pypi/viivakoodi/0.8.0,我使用了这个库,因为我正在使用 python27。我猜 pyBarcode 不提供条形码的字母数字编码,所以我使用了这个库
  • 您的代码有效,至少当我使用| safe 和 viivakoodi 库尝试您的模板时。

标签: python svg jinja2


【解决方案1】:

生成的 SVG 输出包括 XML 标头和文档类型:

>>> print '\n'.join(encoded_output.splitlines()[:4])
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg
  PUBLIC '-//W3C//DTD SVG 1.1//EN'
  'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'>

虽然您的代码可以在 Chrome 中运行,但其他浏览器可能不会对包含的额外标头如此宽容。我会将它们从生成的输出中拆分出来:

encoded_output = encoded_output[encoded_output.find('<svg'):]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-22
    • 2013-04-18
    • 2017-04-04
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多