pyechartsは、ブートストラップ/ base.htmlを見つけることができません

免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
このリンク: https://blog.csdn.net/ttinch/article/details/99415034

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())

おすすめ

転載: blog.csdn.net/ttinch/article/details/99415034