免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
pyecharts1.3.1、WebページをレンダリングJinja2のマークアップを使用して
return Markup(chart.render_embed(template_name='index.html'))
{% extends "bootstrap/base.html" %}
プロンプト
jinja2.exceptions.TemplateNotFound: bootstrap/base.html
コールのパス:
# ./pyecharts/charts/base.py
class Base:
def render_embed(
self,
template_name: str = "simple_chart.html",
env: Optional[Environment] = None,
):
self._prepare_render()
html = RenderEngine(env).render_chart_to_template(template_name, chart=self)
return html
def _prepare_render(self):
self.json_contents = self.dump_options()
self._use_theme()
# ./pyecharts/render/engine.py
class RenderEngine:
@staticmethod
def generate_js_link(chart: Any) -> Any:
if not chart.js_host:
chart.js_host = CurrentConfig.ONLINE_HOST
links = []
for dep in chart.js_dependencies.items:
# TODO: if?
if dep.startswith("http://api.map.baidu.com"):
links.append(dep)
if dep in FILENAMES:
f, ext = FILENAMES[dep]
links.append("{}{}.{}".format(chart.js_host, f, ext))
else:
for url, files in EXTRA.items():
if dep in files:
f, ext = files[dep]
links.append("{}{}.{}".format(url, f, ext))
break
chart.dependencies = links
return chart
def render_chart_to_template(self, template_name: str, chart: Any) -> str:
tpl = self.env.get_template(template_name)
return replace_placeholder(tpl.render(chart=self.generate_js_link(chart)))
テンプレートは次のとおりです。
{%- macro render_chart_content(c) -%}
<div id="{{ c.chart_id }}" style="width:{{ c.width }}; height:{{ c.height }};margin:auto;"></div>
<script>
var chart_{{ c.chart_id }} = echarts.init(
document.getElementById('{{ c.chart_id }}'), '{{ c.theme }}', {renderer: '{{ c.renderer }}'});
{% for js in c.js_functions.items %}
{{ js }}
{% endfor %}
var option_{{ c.chart_id }} = {{ c.json_contents }};
chart_{{ c.chart_id }}.setOption(option_{{ c.chart_id }});
{% if c._is_geo_chart %}
var bmap = chart_{{ c.chart_id }}.getModel().getComponent('bmap').getBMap();
{% if c.bmap_js_functions %}
{% for fn in c.bmap_js_functions.items %}
{{ fn }}
{% endfor %}
{% endif %}
{% endif %}
</script>
{%- endmacro %}
{%- macro render_chart_dependencies(c) -%}
{% for dep in c.dependencies %}
<script type="text/javascript" src="{{ dep }}"></script>
{% endfor %}
{%- endmacro %}
render_embed方法は、get_template、ブートストラップする方法を見つけることができないことの原因不明の理由をレンダリング
ソリューション:、render_templateとして変更self._prepare_renderの必要性()とchart.dependenciesを取得
(render_embed後)関数は(render_embed_new追加)
# ./pyecharts/charts/base.py
class Base:
def render_embed_new(
self,
env: Optional[Environment] = None,
):
self._prepare_render()
return RenderEngine(env).generate_js_link(self)
return render_template('index.html', chart=chart.render_embed_new())