VSCode执行Python+Jinja2代码报TemplateNotFound,虚拟环境运行正常求助
解决VSCode中Jinja2模板找不到的问题
这个问题我之前也碰到过,核心原因其实很简单:VSCode终端的工作目录和你手动进入虚拟环境的目录不一致,和虚拟环境本身是否被VSCode识别没关系。
具体原因拆解
- 你的Jinja2代码里用了
FileSystemLoader('.'),这个.指代的是当前终端的工作目录,而不是脚本所在的目录。 - 当你直接进入虚拟环境目录执行脚本时,当前工作目录就是模板
hworld.j2所在的位置,所以能正常找到;但VSCode默认的工作目录可能是你打开的项目根目录(比如你在VSCode里打开的是上级文件夹),这时候.指向的是根目录,自然找不到子目录里的模板文件。 - 哪怕VSCode已经切换到对应的虚拟环境,虚拟环境只是提供Python解释器,并不会自动把终端工作目录切换到虚拟环境所在的文件夹。
几种解决方法
- 手动切换终端工作目录:在VSCode终端里输入
cd命令,切换到你的Python脚本和hworld.j2所在的目录,再运行脚本,比如:cd /path/to/your/virtualenv-folder python your-script.py - 修改VSCode的工作目录:直接在VSCode里打开存放脚本和模板的那个文件夹(通过
File > Open Folder选择),这样终端的默认工作目录就会自动变成这个文件夹,运行脚本就不会报错了。 - 用脚本所在目录作为模板加载路径(最推荐):修改Python代码,让Jinja2自动从脚本所在的目录找模板,不管在哪运行都不会出错:
import os from jinja2 import FileSystemLoader, Environment # 获取当前脚本的绝对路径所在目录 script_directory = os.path.dirname(os.path.abspath(__file__)) env = Environment(loader=FileSystemLoader(script_directory)) template = env.get_template('hworld.j2') print(template.render()) - 指定模板的绝对路径:直接把
FileSystemLoader('.')改成模板所在的绝对路径,比如FileSystemLoader('/Users/you/your-project/virtualenv'),这种方法虽然有效,但不够灵活,换环境就需要修改路径。
内容的提问来源于stack exchange,提问作者Somenath Sinha
相关产品推荐
相关产品推荐

