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

如何在Jinja2模板中导入Python库?解决fractions未定义报错

解决Jinja2中fractions未定义的问题

报错原因很明确:模板代码里调用了fractions.Fraction,但调用render()时没有将fractions模块传入模板的上下文环境,导致Jinja2找不到这个对象,抛出UndefinedError。

当然可以实现需求,提供两种可行方案:

方案一:将fractions模块传入模板上下文

修改Python调用代码,把fractions作为参数传给render():

from jinja2 import Template
import fractions

with open("c.jinja") as f:
    t = Template(f.read())
    a = 2
    b = 3
    c = 4
    d = 5
    # 把fractions模块传入模板
    print(t.render(a=a, b=b, c=c, d=d, fractions=fractions))

原模板代码保持不变,运行后就能得到期望输出。

方案二:提前在Python中计算好结果再传入模板

如果不想让模板依赖外部模块,可在Python代码中完成分数化简,再把结果传给模板:

Python代码:

from jinja2 import Template
import fractions

with open("c.jinja") as f:
    t = Template(f.read())
    a = 2
    b = 3
    c = 4
    d = 5
    # 计算未化简的分子分母
    raw_num = a*d + b*c
    raw_den = b*d
    # 化简分数
    simplified = fractions.Fraction(raw_num, raw_den)
    # 传入计算好的所有值
    print(t.render(
        a=a, b=b, c=c, d=d,
        raw_num=raw_num, raw_den=raw_den,
        sim_num=simplified.numerator, sim_den=simplified.denominator
    ))

修改后的模板:

The solution of ${{a}}/{{b}} + {{c}}/{{d}}$ is ${{raw_num}}/{{raw_den}} = {{sim_num}}/{{sim_den}}$.

两种方案运行后,都能得到期望输出:

The solution of $2/3 + 4/5$ is $22/15=22/15$.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 20:42:35