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

使用Jinja2与pdfkit在Streamlit生成PDF遇TemplateNotFound错误求助

解决Jinja2 TemplateNotFound错误

错误原因

你的代码使用相对路径./作为Jinja2的模板搜索路径,但Streamlit运行时的当前工作目录可能并非app.py所在的根目录(比如从其他目录启动应用、多页面结构导致路径上下文变化),导致Jinja2无法定位到reportTemplate.html文件。

解决方案

通过Python的os模块结合__file__获取app.py的绝对目录,以此作为模板搜索路径,确保无论运行环境如何都能准确找到模板文件。

修改后的Python代码

import streamlit as st
import pandas as pd
import numpy as np
import altair as alt
import pdfkit
import jinja2
import os  # 新增os模块用于路径处理

uploaded_file = st.file_uploader("", accept_multiple_files=False) 
if uploaded_file:  # 新增判断,避免未上传文件时触发报错
    df = pd.read_csv(uploaded_file)

    TEMPLATE_FILE = "reportTemplate.html"
    # 获取当前app.py所在的绝对目录
    current_dir = os.path.dirname(os.path.abspath(__file__))
    # 以绝对目录作为模板搜索路径
    templateLoader = jinja2.FileSystemLoader(searchpath=current_dir)
    templateEnv = jinja2.Environment(loader=templateLoader)
    template = templateEnv.get_template(TEMPLATE_FILE)

    outputText = template.render(df=df, month='May')
    # 用绝对路径保存生成的HTML文件,避免路径歧义
    html_output_path = os.path.join(current_dir, 'report.html')
    with open(html_output_path, 'w') as html_file:
        html_file.write(outputText)

额外检查项

  • 确认reportTemplate.html的文件名拼写完全正确(Linux/macOS系统对文件名大小写敏感)。
  • 如果后续将模板文件移至子目录,需调整searchpath为对应子目录的绝对路径(例如os.path.join(current_dir, 'templates'))。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 13:30:13