Python Google App Engine Jinja2无法找到Include

时间:2013-09-23 13:37:57

标签: python google-app-engine jinja2

我是谷歌应用引擎和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" %}

1 个答案:

答案 0 :(得分: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 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默认配置。