Google App Engine WebApp2 模板不工作
Google App Engine WebApp2 template not working
我正在学习Google App Engine,并开始使用WebApp2 框架+ Jinja2 模板。
我写了下面的代码:
Main.py
import webapp2
import os
import jinja2
from google.appengine.ext.webapp import template
from google.appengine.api import users
from google.appengine.ext import ndb
template_dir = os.path.join(os.path.dirname(__file__), 'templates')
jinja_env = jinja2.Environment(loader = jinja2.FileSystemLoader(template_dir))
class Handler(webapp2.RequestHandler):
def write(self, *a, **kw):
self.response.out.write(*a, **kw)
def render_str(self, template, **params):
t = jinja_env.get_template(template)
return t.render(params)
def render(self, template, **kw):
self, write(self.render_str(template, **kw))
class MainHandler(webapp2.RequestHandler):
def get(self):
self.response.write('Hello world!')
class PageOne(Handler):
def get(self):
self.render('pageone.html')
app = webapp2.WSGIApplication([('/', MainHandler),('/pageone', PageOne)], debug=True)
app.yaml
application: tbapp
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.2"
- name: jinja2
version: latest
模板文件夹中还有一个 pageone.html HTML 文件。
现在,当我 运行 文件时,主页显示 Hello world!。但是,当我 运行 http://localhost:8080/pageone..... 它 returns 以下错误..
File "E:\gae_apps\tbapp\tbapp\main.py", line 50, in get
self.render('pageone.html')
File "E:\gae_apps\tbapp\tbapp\main.py", line 40, in render
self, write(self.render_str(template, **kw))
NameError: global name 'write' is not defined
谁能指导我,我做错了什么。我无法弄清楚。 TIA
正如 Amber 指出的那样,您在 Handler
的 render
方法中有错字。
替换
def render(self, template, **kw):
self, write(self.render_str(template, **kw))
有
def render(self, template, **kw):
self.write(self.render_str(template, **kw))
错误信息确实给了你一个提示
NameError: global name 'write' is not defined
我正在学习Google App Engine,并开始使用WebApp2 框架+ Jinja2 模板。
我写了下面的代码:
Main.py
import webapp2
import os
import jinja2
from google.appengine.ext.webapp import template
from google.appengine.api import users
from google.appengine.ext import ndb
template_dir = os.path.join(os.path.dirname(__file__), 'templates')
jinja_env = jinja2.Environment(loader = jinja2.FileSystemLoader(template_dir))
class Handler(webapp2.RequestHandler):
def write(self, *a, **kw):
self.response.out.write(*a, **kw)
def render_str(self, template, **params):
t = jinja_env.get_template(template)
return t.render(params)
def render(self, template, **kw):
self, write(self.render_str(template, **kw))
class MainHandler(webapp2.RequestHandler):
def get(self):
self.response.write('Hello world!')
class PageOne(Handler):
def get(self):
self.render('pageone.html')
app = webapp2.WSGIApplication([('/', MainHandler),('/pageone', PageOne)], debug=True)
app.yaml
application: tbapp
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.2"
- name: jinja2
version: latest
模板文件夹中还有一个 pageone.html HTML 文件。
现在,当我 运行 文件时,主页显示 Hello world!。但是,当我 运行 http://localhost:8080/pageone..... 它 returns 以下错误..
File "E:\gae_apps\tbapp\tbapp\main.py", line 50, in get
self.render('pageone.html')
File "E:\gae_apps\tbapp\tbapp\main.py", line 40, in render
self, write(self.render_str(template, **kw))
NameError: global name 'write' is not defined
谁能指导我,我做错了什么。我无法弄清楚。 TIA
正如 Amber 指出的那样,您在 Handler
的 render
方法中有错字。
替换
def render(self, template, **kw):
self, write(self.render_str(template, **kw))
有
def render(self, template, **kw):
self.write(self.render_str(template, **kw))
错误信息确实给了你一个提示
NameError: global name 'write' is not defined