我是谷歌应用引擎和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" %}
答案 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默认配置。