pyecharts 无法找到bootstrap/base.html

在使用pyecharts 1.3.1版本时,遇到由于jinja2渲染问题导致找不到bootstrap/base.html的错误。调用路径涉及render_embed方法中的get_template和render方法。解决方法是将render_embed替换为render_template,并在之前执行self._prepare_render()以获取chart.dependencies。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pyecharts1.3.1采用jinja2 Markup渲染网页,

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方法导致无法查找到bootstrap,原因未知

解决办法:修改为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())
### 替代 Bootstrap 3.0.3 的 CDN 链接 对于需要替换指定 URL 的 Bootstrap CSS 文件的情况,可以选择不同的 CDN 提供商来获取最新的或特定版本的 Bootstrap 资源。以下是几个常见的 CDN 平台及其对应的 Bootstrap 3.0.3 版本链接: #### MaxCDN (由 StackPath 运营) MaxCDN 是官方推荐的一个常用 CDN 平台,提供稳定的服务支持。 ```html <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css"> ``` #### jsDelivr jsDelivr 是另一个高性能的开源项目 CDN,适合用于加载各种前端库和框架。 ```html <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.0.3/dist/css/bootstrap.min.css"> ``` #### BootCDN BootCDN 是专门为中文开发者设计的加速服务,能够更快速地访问国外资源。 ```html <link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.0.3/css/bootstrap.min.css"> ``` 以上三个选项均提供了可靠的 Bootstrap 3.0.3 CSS 文件托管服务[^1]。 如果希望下载本地副本而非通过网络请求,则可以从官方网站或者 GitHub 发布页直接获取压缩包中的静态文件: - 官方网站下载地址:[https://getbootstrap.com/docs/3.0/getting-started/#download](https://getbootstrap.com/docs/3.0/getting-started/#download)[^2] 另外,在实际开发过程中需要注意不同环境下的兼容性和安全性设置;例如生产环境中建议锁定具体版本号以防止意外更新带来的潜在风险[^3]。 ```python import requests def fetch_bootstrap_css(version='3.0.3'): url = f"https://cdn.jsdelivr.net/npm/bootstrap@{version}/dist/css/bootstrap.min.css" response = requests.get(url) if response.status_code == 200: with open(f'bootstrap-{version}.min.css', 'wb') as file: file.write(response.content) fetch_bootstrap_css() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值