【问题标题】:Problems with Jinja2: TemplateNotFound: index.htmlJinja2 的问题:TemplateNotFound:index.html
【发布时间】:2012-06-17 00:39:05
【问题描述】:

我正在尝试使用 jinja2 构建我的第一个 GAE 应用程序。在克服了十几个小错误之后,现在我陷入了困境:

Traceback (most recent call last):

File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2\webapp2.py", line 1536, in __call__
    rv = self.handle_exception(request, response, e)
  File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2\webapp2.py", line 1530, in __call__
    rv = self.router.dispatch(request, response)
  File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2\webapp2.py", line 1278, in default_dispatcher
    return route.handler_adapter(request, response)
  File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2\webapp2.py", line 1102, in __call__
    return handler.dispatch()
  File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2\webapp2.py", line 572, in dispatch
    return self.handle_exception(e, self.app.debug)
  File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2\webapp2.py", line 570, in dispatch
    return method(*args, **kwargs)
  File "C:\Users\CG\Documents\udacity\HiMon\main.py", line 31, in get
    template = jinja_environment.get_template('index.html')
  File "C:\Program Files (x86)\Google\google_appengine\lib\jinja2\jinja2\environment.py", line 719, in get_template
    return self._load_template(name, self.make_globals(globals))
  File "C:\Program Files (x86)\Google\google_appengine\lib\jinja2\jinja2\environment.py", line 693, in _load_template
    template = self.loader.load(self, name, globals)
  File "C:\Program Files (x86)\Google\google_appengine\lib\jinja2\jinja2\loaders.py", line 115, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "C:\Program Files (x86)\Google\google_appengine\lib\jinja2\jinja2\loaders.py", line 180, in get_source
    raise TemplateNotFound(template)
TemplateNotFound: index.html

这是我的 yaml 文件:

application: himother
version: 1
runtime: python27
api_version: 1
threadsafe: yes

handlers:
- url: /favicon\.ico
  static_files: favicon.ico
  upload: favicon\.ico

- url: .*
  script: main.app

libraries:
- name: webapp2
  version: "2.5.1"
- name: jinja2
  version: "2.6"

这是我的代码:

import os
import webapp2

import jinja2

jinja_environment = jinja2.Environment(autoescape=True,
    loader=jinja2.FileSystemLoader(os.path.join(os.path.dirname(__file__), 'templates')))

class MainPage(webapp2.RequestHandler):
    def get(self):
        template_values = {
            'name': 'Serendipo',
            'verb': 'extremely happy'
        }

        template = jinja_environment.get_template('index.html')
        self.response.out.write(template.render(template_values))

app = webapp2.WSGIApplication([('/', MainPage)],
                              debug=True)

这是我的 .html 模板:

<!DOCTYPE html>
<html>
    <head>
        <title>Look Ma, I'm using Jinja!</title>
    </head>
    <body>
        Hi there - I'm {{ name }}, and I {{ verb }} programming!
    </body>
</html>

尽管有错误消息,但我有一个名为“templates”的文件夹,并在其中创建了 index.html 文件:

我也安装了jinja2。

现在有人知道这个错误的原因吗?

【问题讨论】:

    标签: python google-app-engine templates jinja2


    【解决方案1】:

    尝试使用

    loader=jinja2.FileSystemLoader('templates')
    

    而不是

    loader=jinja2.FileSystemLoader(os.path.join(os.path.dirname(__file__), 'templates'))
    

    它对我有用。

    【讨论】:

    • 嗨,@v0hkus,感谢您的回答,但错误仍然存​​在:文件“C:\Program Files (x86)\Google\google_appengine\lib\jinja2\jinja2\loaders.py”,行180,在 get_source raise TemplateNotFound(template) TemplateNotFound: index.html INFO 2012-06-17 14:20:15,908 dev_appserver.py:2891] "GET / HTTP/1.1" 500 - 再次感谢!
    【解决方案2】:

    这为我解决了:

    mkdir templates
    echo "hello world" > templates/index.html
    

    【讨论】:

    • 出于某种原因,我实际上不得不删除文件然后重新添加它们,以便 Flask 检测到文件存在。一定是一开始就弄错了
    【解决方案3】:

    好吧,我的错误既简单又愚蠢。 我以错误的方式创建了文件“index.html”(here 正确的方式)。所以,我的“index.html”文件确实是一个“.text”文件(因为我只是将它重命名为“index.html”而不是"save as" index.html")。 谢谢你们的帮助,伙计们!

    【讨论】:

      【解决方案4】:
      template_dir = os.path.join(os.path.dirname(__file__), 'templates')
      jinja_env = jinja2.Environment(loader = jinja2.FileSystemLoader(template_dir),autoescape = True)
      

      【讨论】:

      • 只需添加一个名为 templates 的文件夹并将 index.html 放在那里
      • 虽然此代码可以作为解决方案,但最好添加上下文并解释您的代码。这有助于未来的访问者深入了解此代码中需要注意的重要事项,并帮助其他人学习,以便他们可以将这些知识应用到自己的代码中。或解决此代码与 OP 的尝试有何不同/为何不同,并对比此解决方案为何有效。这可以保持 SO 的高质量,不鼓励“给我代码”的问题,并鼓励分享知识和信息。访问者更有可能关注和阅读信息丰富的帖子。高质量的答案更有可能获得“点赞”
      【解决方案5】:

      基于我在 Jinja2 上的第一次 GAE 工作的两个想法。首先,在您的 yaml 文件中,您有“-url: .”,尽管我根据我看到的教程使用了“-url: /.”。但是,这可能与您的问题无关。其次,我使用此页面上的指导来建立我的 Jinja2 渲染器,并且在应用程序目录的 templates 子目录中找到模板没有问题: http://webapp-improved.appspot.com/api/webapp2_extras/jinja2.html#module-webapp2_extras.jinja2

      【讨论】:

        【解决方案6】:

        我收到了同样的错误并尝试了所有答案。后来才知道,要先配置好环境,找到合适的文件夹,才能搜索到html文件,然后jinja2才能找到文件。

        以下几行将消除错误:

        env = Environment(loader=FileSystemLoader(searchpath='C:\Folder\of\html\file')
        template = env.get_template('Name_of_file.html')
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-02-04
          • 2018-01-06
          • 1970-01-01
          • 2019-02-27
          • 2011-03-04
          • 2011-06-08
          相关资源
          最近更新 更多