1

我是谷歌应用引擎和 python 开发的新手,我正在尝试使用 Jinja2 作为我的模板引擎。我有一个页面,我试图在其上“包含”页眉和页脚,但我不断收到此错误:TemplateNotFound: base/header.html

我的代码如下。如果您有任何建议,请告诉我。

Python

JINJA_ENVIRONMENT = jinja2.Environment(
   loader=jinja2.FileSystemLoader(os.path.dirname(__file__)),
   extensions=['jinja2.ext.autoescape'])

class MainPage(webapp.RequestHandler):


    def get(self):
        template_values = {'title' : 'Test Value'}
        template = JINJA_ENVIRONMENT.get_template('/public/templates/index.html')
        self.response.write(template.render(template_values))

配置

libraries:
- name: webapp2
  version: latest
- name: jinja2
  version: latest

文件结构

- my application
  - public
    - scripts
    - stylesheets
    - templates
      - base
        - header.html
        - footer.html
      - index.html
  - app.yaml
  - myapplication.py

HTML (index.html)

{% include "base/header.html" %}
<nav class="top-bar" style="">
  <!-- more html here -->
</nav>
{% include "base/footer.html" %}
4

1 回答 1

0

我没有使用 jinja2 的 loader 属性,所以我不确定这条线的作用

loader=jinja2.FileSystemLoader(os.path.dirname(__file__))

但我确实成功地将 App Engine 与 jinja2 一起使用,所以我想我可以提供帮助。我知道默认情况下 jinja2 在项目的根目录中查找名为“templates”的目录。因此对于 header.html,jinja2 期望该文件位于“templates/base/header.html”中。

如果您查看 environment.py ,其中 get_template 函数用于 jinja2 if throws a

    If the template does not exist a :exc:`TemplateNotFound` exception is
    raised.

在您的应用程序引擎项目的根目录中创建一个模板目录,并将所有 jinja2 模板移动到那里,让我知道是否可以修复它。当您将模板名称传递给 jinja2 时,它们都将与文件夹相关,因此调用应如下所示

template = JINJA_ENVIRONMENT.get_template('index.html')

index.html 在您的根目录中的 /templates/index.html 中。

如果是这样,我可以向您展示如何通过将字典传递给它来自定义 jinja2 默认配置。

于 2013-09-23T14:52:40.127 回答