【问题标题】:Jinja can't find template pathJinja 找不到模板路径
【发布时间】: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

【问题讨论】:

    标签: python-3.x virtualenv jinja2


    【解决方案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')
    

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

    【讨论】:

    • 另外,在 PackageLoader 类示例中,'templates' 是包含模板的目录的相对路径(相对于包 frontdesk)。
    猜你喜欢
    • 2021-07-12
    • 1970-01-01
    • 1970-01-01
    • 2021-03-29
    • 2019-12-03
    • 1970-01-01
    • 2018-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多