Flask dynamic graphviz和SVG示例

Flask dynamic graphviz和SVG示例,flask,graphviz,Flask,Graphviz,我正在尝试创建一个Graphviz图像,但不是保存图像并加载到网页中,而是将其作为SVG传递 这是一种工作方式,以下是示例: from flask import Flask from graphviz import Graph app = Flask(__name__) @app.route('/svgtest') def svgtest(): chart_data = Graph() chart_data.node('H', 'Hello') chart_data.nod

我正在尝试创建一个Graphviz图像,但不是保存图像并加载到网页中,而是将其作为SVG传递

这是一种工作方式,以下是示例:

from flask import Flask
from graphviz import Graph


app = Flask(__name__)


@app.route('/svgtest')
def svgtest():
  chart_data = Graph()

  chart_data.node('H', 'Hello')
  chart_data.node('W', 'World')
  chart_data.edge('H', 'W')

  chart_output = chart_data.pipe(format='svg')

 return render_template('svgtest.html', chart_output=chart_output)
在我的HTML页面中,我有

<embed type="image/svg+xml" src={{ chart_output|safe }} />

然而,输出是不正确的

任何帮助都会很好,我开始自言自语,即使这样也没有帮助


谢谢。

标签的
src
属性应该包含要嵌入内容的url,而不是内容本身:

HTML
元素在指定的位置嵌入外部内容 文件中的要点。此内容由外部供应商提供 应用程序

src
正在嵌入的资源的URL

如果要使用
embed
,则应在其自己的url下提供svg(无html模板),并在
embed
标记的
src
属性中使用该url


或者,您可以直接在html模板中插入svg,而无需使用
embed
标记。

您可以像这样使用svg:

{{ chart_output|safe }}
<img src="data:image/png;base64,{{chart_output|safe}}" />
此外,您还可以使用png格式:

@app.route('/')
def svgtest():
    chart_data = Graph()

    chart_data.node('H', 'Hello')
    chart_data.node('W', 'World')
    chart_data.edge('H', 'W')


    chart_output = chart_data.pipe(format='png')
    chart_output = base64.b64encode(chart_output).decode('utf-8')

    return render_template('svgtest.html', chart_output=chart_output)
html是这样的:

{{ chart_output|safe }}
<img src="data:image/png;base64,{{chart_output|safe}}" />


快乐编码

这应该行得通。我做了一些修改

from flask import Flask
from graphviz import Graph


app = Flask(__name__)


@app.route('/svgtest')
def svgtest():
  chart_data = Graph()

  chart_data.node('H', 'Hello')
  chart_data.node('W', 'World')
  chart_data.edge('H', 'W')

  chart_output = chart_data.pipe(format='svg').encode("utf-8")

 return render_template('svgtest.html', chart_output=chart_output)
修改后的html将是:

{{chart_output|safe}}

谢谢你的回复,你能给我举个例子吗?或者我的例子,我想我明白你的意思,但我还是不能100%确定