Html 在Django中显示qrcode中的SVG图像

Html 在Django中显示qrcode中的SVG图像,html,django,svg,uri,qr-code,Html,Django,Svg,Uri,Qr Code,根据qrcode文档,我生成了一个SVG二维码: import qrcode import qrcode.image.svg def get_qrcode_svg( uri ): img = qrcode.make( uri, image_factory = qrcode.image.svg.SvgImage) return img 那很好。我得到一个对象。 我现在想用Django html显示这个。我将此对象作为上下文传递(作为qrcode\u svg)并尝试使用显示,但这并

根据
qrcode
文档,我生成了一个SVG二维码:

import qrcode
import qrcode.image.svg
def get_qrcode_svg( uri ):
    img = qrcode.make( uri, image_factory = qrcode.image.svg.SvgImage)
    return img
那很好。我得到一个
对象。
我现在想用Django html显示这个。我将此对象作为上下文传递(作为
qrcode\u svg
)并尝试使用
显示,但这并没有真正实现。错误显示它正在尝试获取img url,但是否有一种方法可以在不保存img等的情况下执行此操作。?终端输出:

>>> UNKNOWN ?????? 2020-06-16 07:38:28.295038 10.0.2.2 GET 
/user/<qrcode.image.svg.SvgImage object at 0x7f94d84aada0>
Not Found: /user/<qrcode.image.svg.SvgImage object at 0x7f94d84aada0>
"GET /user/%3Cqrcode.image.svg.SvgImage%20object%20at%200x7f94d84aada0%3E HTTP/1.1" 404 32447
>>未知??????2020-06-16 07:38:28.295038 10.0.2.2获取
/使用者/
找不到:/user/
“GET/user/%3Cqrcode.image.svg.SvgImage%20object%20at%200x7f94d84aada0%3E HTTP/1.1”404 32447

您可以将其写入响应流:

import qrcode
from qrcode.image.svg import SvgImage
from django.http import HttpResponse
from bytesIO import bytesIO

def get_qrcode_svg(uri):
    stream = bytesIO()
    img = qrcode.make( uri, image_factory=SvgImage)
    img.save(stream)
    return stream.getvalue().decode()
这将传递svg源代码,而不是带有源代码的URI。因此,在模板中,您可以使用以下方式渲染:

{{ qrcode_svg|safe }}

{{qrcode\u svg | safe}}
为了解决这个问题,我将
转换成一个base64字符串,然后可以在HTML中用作
img src=“{{variable}}”

导入io
导入base64
从qr码导入make作为qr码
从qrcode.image.svg导入SvgPathFillImage
def get_qr_image_for_user(qr_url:str)->str:
svg\u image\u obj=qr\u代码\u品牌(qr\u url,image\u工厂=SvgPathFillImage)
image=io.BytesIO()
svg_image_obj.save(流=图像)
base64_image=base64.b64encode(image.getvalue()).decode()
return'数据:image/svg+xml;utf8;base64,“+base64_图像

如果这不是一个好的解决方案,我希望得到一些反馈。干杯看起来不错。
img.save(stream)
是否将文件保存到我的磁盘?@SuaveSouris:不,保存到
bytesIO
流。太棒了,这成功了!但是我需要使用
SvgImage
而不是
SvgFragmentImage
,后者的格式很有趣,比如
:svg
位导致了问题。我想以pdf格式显示使用xhtml2pdf生成的二维码,但二维码没有显示。它只显示我是否呈现了一个普通的HTML模板@谢谢你,我同意威廉的回答,因为它更清晰、简洁,并提供了一些解释。