Jinja 找不到模板路径

Posted

技术标签:

【中文标题】Jinja 找不到模板路径【英文标题】:Jinja can't find template path 【发布时间】:2016-06-18 13:59:47 【问题描述】:

我无法让 Jinja2 读取我的模板文件。

jinja2.exceptions.TemplateNotFound: template.html

配置 Jinja2 以加载模板的最简单方法 应用程序大致如下:

从 jinja2 导入环境,PackageLoader env = Environment(loader=PackageLoader('yourapplication', 'templates')) 这个 将创建一个具有默认设置的模板环境和一个 在模板文件夹中查找模板的加载器 你的应用程序 python 包。提供不同的装载机,并且 如果您想从 数据库或其他资源。

要从此环境中加载模板,您只需调用 get_template() 方法,然后返回加载的模板:

template = env.get_template('mytemplate.html')

env = Environment(loader=FileSystemLoader('frontdesk', 'templates'))
template = env.get_template('template.html')

我的树(我已经激活了 venv @frontdesk)

.
├── classes.py
├── labels.txt
├── payments.py
├── templates
├── test.py
└── venv

【问题讨论】:

【参考方案1】:

您正在使用FileSystemLoader class,它具有以下初始化参数:

class FileSystemLoader(BaseLoader):
    def __init__(self, searchpath, encoding='utf-8', followlinks=False):

您正在使用 2 个参数对其进行初始化:frontdesktemplates,这基本上没有多大意义,因为 templates 字符串将作为 encoding 参数值传递。如果你想继续使用FileSystemLoader作为模板加载器,可以这样使用:

from jinja2 import Environment, FileSystemLoader

env = Environment(loader=FileSystemLoader('frontdesk/templates'))
template = env.get_template('index.html')

或者,如果您打算使用PackageLoader class:

from jinja2 import Environment, PackageLoader

env = Environment(loader=PackageLoader('frontdesk', 'templates'))
template = env.get_template('index.html')

在这种情况下,您需要确保 frontdesk 是 package - 换句话说,确保 frontdesk 目录中有 __init__.py 文件。

【讨论】:

另外,在 PackageLoader 类示例中,'templates' 是包含模板的目录的相对路径(相对于包 frontdesk)。

以上是关于Jinja 找不到模板路径的主要内容,如果未能解决你的问题,请参考以下文章

模板提供了错误的媒体目录路径,Django 找不到图像

在为 ARM 模板部署创建的 Azure DevOps Pipeline 中找不到 JSON 文件路径

Django:Heroku 上的生产应用程序找不到带有“路径”urlpattern 的模板

错误:无法写入字节码。该系统找不到指定的路径。 (os error 3). 编译基板节点模板时出错

Django 找不到模板

找不到django模板