我正试着在我的网页上找到这个迷你留言页面。这是我的Python代码(使用谷歌应用程序引擎),我一直在回复“post = Posts(parent = wall_key(wall_name))< ----这是说没有定义wall_name?”我没有在页面顶部定义它吗?顺便说一下,我对编程非常陌生,你可能会说。
Traceback (most recent call last):
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\runtime\wsgi.py", line 240, in Handle
handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\runtime\wsgi.py", line 299, in _LoadHandler
handler, path, err = LoadObject(self._handler)
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\runtime\wsgi.py", line 85, in LoadObject
obj = __import__(path[0])
File "E:\Documents\stage_4_work_session_2\work_session_4.py", line 159, in <module>
class guestbookHandler(myHandler):
File "E:\Documents\stage_4_work_session_2\work_session_4.py", line 178, in guestbookHandler
post = Post(parent=wall_key(wall_name))
NameError: name 'wall_name' is not defined
INFO 2015-05-09 19:18:06,483 module.py:737] default: "GET /favicon.ico HTTP/1.1" 500 -
这是错误
class myHandler(webapp2.RequestHandler):
def write(self, *a, **kw):
self.response.write(*a, **kw)
def render_str(self, template, **params):
template = jinja_env.get_template(template)
return template.render(params)
def render(self, template, **kw):
self.write(self.render_str(template,**kw))
#This code identifies the name of the wall
DEFAULT_WALL='Public'
def wall_key(wall_name=DEFAULT_WALL):
return ndb.Key('Wall', wall_name)
#This Post class sets up the model for my datastore
class Post(ndb.Model):
guest_name=ndb.StringProperty(indexed=False)
guest_message=ndb.StringProperty(indexed=False)
date=ndb.DateTimeProperty(auto_now_add=True)
这是myHandler信息
{{1}}
答案 0 :(得分:0)
请求对象提供了一个返回值的get()方法 从查询和POST数据中解析出的参数。
因此request.get()
从您的html代码中获取POST表单中的数据,而不是从您的python应用程序文件中获取数据。为此,通常,您的html代码中应该有一个包含name="wall_name"
字段的表单。或者发送包含wall_name
参数的查询字符串。您的错误表明您的请求中没有参数wall_name
。
其次,如果要在get()
方法中使用参数的默认值,则应使用default_value
参数:
wall_name = self.request.get('wall_name',default_value = DEFAULT_WALL)
P.S。如果你输入你的html代码也会有所帮助。
答案 1 :(得分:-1)
我不知道这是否是导致错误的直接原因,但我注意到了这一点:
def post(self):
wall_name = self.request.get('wall_name',DEFAULT_WALL)
post = Post(parent=wall_key(wall_name))
你有一个与它所用函数同名的局部变量。这不好。 best 会发生什么事情,该函数将能够运行一次,但它将不再是一个函数,因为它的名称被覆盖了。
编辑:实际上,我用一个小函数对它进行了测试,并没有像我期望的那样失败,但我仍然认为更改变量名称是个好主意。 ..
您应该更改该变量的名称(post),并且更改Post
类的名称可能也没有什么坏处。称之为描述性内容,例如GuestBook_Post
。
更新:我运行代码时无法重现“wall_name未定义”错误。您可以import logging
然后在问题行前面用wall_name
记录logging.debug()
的值,这可能会对情况有所了解。