将svg存储在jinja2中的变量中

时间:2015-10-26 07:42:32

标签: python svg jinja2

我试图使用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吗?

1 个答案:

答案 0 :(得分:2)

生成的SVG输出包括XML标头和doctype:

>>> 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'):]