NameError: name 'MainPage' is not defined python-2.7
NameError: name 'MainPage' is not defined python-2.7
我正在尝试完成一个练习,以使用 python 2.7
了解有关 google appengine 的更多信息
到目前为止,我的 main.py 文件中有这段代码,但是当我尝试通过我的本地主机访问它时,我收到以下错误消息:
NameError:名称 'MainPage' 未定义
我无法找到错误的来源,如果我对这个主题还很陌生,我将不胜感激。
import webapp2
import jinja2
from google.appengine.api import users
from google.appengine.ext import ndb
import os
from myuser import MyUser
JINJA_ENVIRONMENT = jinja2.Environment(
loader=jinja2.FileSystemLoader(os.path.dirname(__file__)),
extensions=['jinja2.ext.autoescape'],
autoescape=True
)
class MainPage(webapp2.RequestHandler):
def get(self):
self.response.headers['Content-Type'] = 'text/html'
url = ''
url_string = ''
welcome = 'Welcome back'
myuser = None
user = users.get_current_user()
if user:
url = users.create_logout_url(self.request.uri)
url_string = 'logout'
myuser_key = ndb.Key('MyUser', user.user_id())
myuser = myuser_key.get()
if myuser == None:
welcome = 'Welcome to the application'
myuser = MyUser(id=user.user_id())
myuser.put()
else:
url = users.create_login_url(self.request.uri)
url_string = 'login'
template_values = {
'url' : url,
'url_string' : url_string,
'user' : user,
'welcome' : welcome,
'myuser' : muyser
}
template = JINJA_ENVIRONMENT.get_templaet('main.html')
self.response.write(template.render(template_values))
app = webapp2.WSGIApplication([
('/', MainPage),
], debug=True)
def post(self):
self.response.header['Content-Type'] = 'text/html'
user = users.get_current_user()
myuser_key = ndb.Key('MyUser', user.user_id())
myuser = myuser_key.get()
myuser.name = self.request.get('users_name')
myuser.age = int(self.request.get('users_age'))
myuser.put()
self.redirect('/')
更简单的例子,class 变量不能引用 class 本身
class Foo:
x = Foo()
def bar(self):
pass
运行它
Traceback (most recent call last):
File "python", line 1, in <module>
File "python", line 2, in Foo
NameError: name 'Foo' is not defined
您在 MainPage
class 中定义了 app
,在 get()
和 post()
之间。将其移出 class
之后
class MainPage(webapp2.RequestHandler):
def get(self):
pass # Fill this back in
def post(self):
pass # Fill this back in
app = webapp2.WSGIApplication([
('/', MainPage),
], debug=True)
我可能还建议您为 HTTP 路由使用一个单独的模块,并保持这个主脚本非常小以仅设置应用程序
我正在尝试完成一个练习,以使用 python 2.7
了解有关 google appengine 的更多信息到目前为止,我的 main.py 文件中有这段代码,但是当我尝试通过我的本地主机访问它时,我收到以下错误消息: NameError:名称 'MainPage' 未定义
我无法找到错误的来源,如果我对这个主题还很陌生,我将不胜感激。
import webapp2
import jinja2
from google.appengine.api import users
from google.appengine.ext import ndb
import os
from myuser import MyUser
JINJA_ENVIRONMENT = jinja2.Environment(
loader=jinja2.FileSystemLoader(os.path.dirname(__file__)),
extensions=['jinja2.ext.autoescape'],
autoescape=True
)
class MainPage(webapp2.RequestHandler):
def get(self):
self.response.headers['Content-Type'] = 'text/html'
url = ''
url_string = ''
welcome = 'Welcome back'
myuser = None
user = users.get_current_user()
if user:
url = users.create_logout_url(self.request.uri)
url_string = 'logout'
myuser_key = ndb.Key('MyUser', user.user_id())
myuser = myuser_key.get()
if myuser == None:
welcome = 'Welcome to the application'
myuser = MyUser(id=user.user_id())
myuser.put()
else:
url = users.create_login_url(self.request.uri)
url_string = 'login'
template_values = {
'url' : url,
'url_string' : url_string,
'user' : user,
'welcome' : welcome,
'myuser' : muyser
}
template = JINJA_ENVIRONMENT.get_templaet('main.html')
self.response.write(template.render(template_values))
app = webapp2.WSGIApplication([
('/', MainPage),
], debug=True)
def post(self):
self.response.header['Content-Type'] = 'text/html'
user = users.get_current_user()
myuser_key = ndb.Key('MyUser', user.user_id())
myuser = myuser_key.get()
myuser.name = self.request.get('users_name')
myuser.age = int(self.request.get('users_age'))
myuser.put()
self.redirect('/')
更简单的例子,class 变量不能引用 class 本身
class Foo:
x = Foo()
def bar(self):
pass
运行它
Traceback (most recent call last):
File "python", line 1, in <module>
File "python", line 2, in Foo
NameError: name 'Foo' is not defined
您在 MainPage
class 中定义了 app
,在 get()
和 post()
之间。将其移出 class
class MainPage(webapp2.RequestHandler):
def get(self):
pass # Fill this back in
def post(self):
pass # Fill this back in
app = webapp2.WSGIApplication([
('/', MainPage),
], debug=True)
我可能还建议您为 HTTP 路由使用一个单独的模块,并保持这个主脚本非常小以仅设置应用程序