将 dash_html_components 传递给 Jinja 模板

Sea*_*uji 7 python jinja2 flask plotly plotly-dash

我正在使用 Python 库 Dash 并且文档声称它不支持使用仪表板 html 代码编写原始 html 的能力。是否存在已知的变通解决此(有点像传递dcc.Graphrender_template()与瓶?)。

我想迁移到 Jinja 模板文件的代码片段是:

app.layout = html.Div(className='ui container', children=[
    html.H1('Locations', className=''),
    html.Div(id='text-content'),
    dcc.Graph(id='map', figure={
        'data': [{
            'lat': df['LAT'],
            'lon': df['LONG'],
            'marker': {
                'color': df['YEAR'],
                'size': 8,
                'opacity': 0.6
            },
            'customdata': df['NO'],
            'type': 'scattermapbox'
        }],
            },
            'hovermode': 'closest',
            'margin': {'l': 0, 'r': 0, 'b': 0, 't': 0}
        }
    })
])
Run Code Online (Sandbox Code Playgroud)

Pau*_*son 0

我以前来过这里,自己问过这个问题,我继续在这里回答:Plotly.offlineplotoutput_type='div'notworking inside HTML - How to embed Plotly to HTML

简而言之,要获取通过 Flask 视图呈现的图表,您可以执行以下操作(取自上面的链接)

  1. 创建图表
  2. 正常调用pyo.plot()无花果,output_type='div'并且include_plotlyjs=False
  3. 将该输出传递给变量Markup()(从烧瓶导入)
  4. Markup(variable)render_template表格一样通过
  5. 使用以下命令在 html 中呈现变量{{ jinja template }}

更实际的演示:

def my_bar_chart():
    *snip irrelevant*
    my_bar_chart = pyo.plot(fig, output_type='div', include_plotlyjs=False)
    return Markup(my_bar_chart)
Run Code Online (Sandbox Code Playgroud)

现在将您的函数导入到您的 app.py / 无论您的视图在哪里,然后将其传递给渲染模板,就像任何表单一样。

这是一个例子:

def my_page():
    my_bar_chart_var = my_bar_chart()
    return render_template('my_page.html',
                            bar_chart_1=my_bar_chart_var)
Run Code Online (Sandbox Code Playgroud)

bar_chart_1然后,在该页面的 html 上,只需在 jinja 模板中传递,如下所示:

{{ bar_chart_1 }}
Run Code Online (Sandbox Code Playgroud)