我正在尝试用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。
现在有没有人知道这个错误的原因?
答案 0 :(得分: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
的{{1}}部分中加入libraries
:
app.yaml
答案 1 :(得分: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',但这是另一个猜测。
答案 2 :(得分: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'] = ""
答案 3 :(得分:0)
file_put_contents($rand, "[Server]: Welcome To Your New Chat Server");
实际上,代码中的行意味着您将请求定向到模板文件夹,但似乎您没有存储&#34; index.html&#34;在模板文件夹中,只需删除重定向或将索引文件传输到模板文件夹。