将dash_html_components传递给Jinja模板

时间:2018-06-12 23:15:03

标签: python flask jinja2 plotly plotly-dash

我正在使用Python库Dash,文档声称它不支持使用仪表板html代码编写原始html的功能。是否有一项已知的工作(比如将dcc.Graph传递给render_template()与Flask?)。

我想迁移到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}
        }
    })
])

1 个答案:

答案 0 :(得分:0)

我以前来过这里并自己问过这个问题,我继续在这里回答:Plotly.offline plot output_type='div' not working 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. 使用 {{ jinja template }} 将变量呈现在 html 中

多一点实际演示:

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

现在将您的函数导入到 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)

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

{{ bar_chart_1 }}