5

jinja2を使用して最初のGAEアプリを作成しようとしています。ダースの小さなエラーを克服した後、今私はこれで立ち往生しています:

トレースバック(最後の最後の呼び出し):

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もインストールしました。

誰かがこのエラーの原因を今知っていますか?

4

4 に答える 4

5

jinja2に含まれているバージョンを使用している可能性がありますwebapp2_extras

この設定の例は次のとおりです:http ://webapp-improved.appspot.com/api/webapp2_extras/jinja2.html#webapp2_extras.jinja2.Jinja2

主な違いは、自分で設定する代わりに、次のjinja2.Environmentことを行うことです...

from webapp2_extras import jinja2
jinja = jinja2.get_jinja2(app=self.app)
jinja.render_template("index.html")

また、次のセクションに含める必要がある可能性がありjinja2ます。librariesapp.yaml

libraries:                                                                      
- name: jinja2                                                                  
  version: "2.6" 
于 2012-06-13T13:01:26.263 に答える
3

男..私はあなたと同じ問題に直面していて、ちょうど答えを見つけました。

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))

「jinja_environment」の部分には、余分な[、'templates']は必要ありません。これは、次のようにindex.htmlファイル文字列の前に配置する必要があります。

template = jinja_environment.get_template('templates/index.html')

少なくともこれが私にとってはどのように機能したかです(ああ、autoescape = Trueの部分も使用していませんでしたが、オプションだと思います)。

もう一度考えてみると、[、'templates']の部分を残すこともできますが、「index.html」の前に「/」を付けて「/index.html」を作成する必要がありますが、これは別の推測です。

于 2013-01-01T00:45:41.370 に答える
2

[1]とここで説明されているwebapp2_extrasセットアップを使用した後も、このエラーが発生しました。logging.info(jinja2.default_config)を試してみました。これは、テンプレートの文書化されていないデフォルトディレクトリがapp-yaml-dir / templates /('template_path':'templates')であることを示しています。私はそれ以外のすべてを試しました。一度知ったら、リセットすることも、そのままにしておくこともできます。

jinja2.default_config['template_path'] = "html"

テンプレートをさまざまなディレクトリに配置する場合は、テンプレートを空に設定し、レンダリング時にフルパスを使用します。render_response('module/home.html', **context)

jinja2.default_config['template_path'] = ""
  1. http://webapp-improved.appspot.com/api/webapp2_extras/jinja2.html#webapp2_extras.jinja2.Jinja2
于 2015-09-07T10:03:51.263 に答える
0

jinja_environment = jinja2.Environment(autoescape=True, loader=jinja2.FileSystemLoader(os.path.join(os.path.dirname(__file__), 'templates'))) 実際、コードの行は、リクエストをテンプレートフォルダーに送信することを意味しますが、「index.html」がテンプレートフォルダーに保存されていないようです。リダイレクトを削除するか、インデックスファイルをテンプレートフォルダーに転送してください。

于 2017-12-02T09:39:59.360 に答える