You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Bottle框架中为Jinja2配置自定义pandoc过滤器提示未找到

问题原因及解决方法

问题根源

你自行创建的jinja2.Environment实例与Bottle框架内部渲染模板时使用的Jinja2环境完全独立,你在自定义实例上注册的过滤器不会被Bottle的template函数读取到,才会出现过滤器已注册但渲染时找不到的报错。

解决方法

方法一:直接修改Bottle默认Jinja2模板的过滤器配置

这是最简便的方案,不需要重构现有环境配置:

from bottle import get, run, jinja2_template as template, Jinja2Template
import pypandoc

def pandoc_convert(s):
    return pypandoc.convert_text(s, format='md', to='html5')

# 给Bottle默认的Jinja2环境新增过滤器,不覆盖原有默认过滤器
Jinja2Template.defaults.setdefault('filters', {})['pandoc'] = pandoc_convert

@get("/foo")
def foo():
    return template('foo.html')

run(host='localhost', port=8080, debug=True)

方法二:将自定义的Jinja2环境注入到Bottle模板适配器

如果你需要自定义Jinja2的加载器、全局变量等其他配置,可直接把你创建的环境绑定给Bottle的Jinja2模板类:

from bottle import get, run, jinja2_template as template, Jinja2Template
from jinja2 import Environment, FileSystemLoader
import pypandoc

def pandoc_convert(s):
    return pypandoc.convert_text(s, format='md', to='html5')

# 自定义Jinja2环境,可根据需求配置模板路径、语法规则等
custom_env = Environment(
    loader=FileSystemLoader('views'), # 替换为你的模板目录路径
    autoescape=True
)
# 注册自定义过滤器
custom_env.filters['pandoc'] = pandoc_convert

# 把自定义环境绑定给Bottle的Jinja2模板类,后续渲染都会使用该环境
Jinja2Template.env = custom_env

@get("/foo")
def foo():
    return template('foo.html')

run(host='localhost', port=8080, debug=True)

两种方案修改完成后,模板内的{{ "This is *some* markdown" | pandoc }}调用无需调整即可正常生效。

内容的提问来源于stack exchange,提问作者somenxavier

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 03:00:04