当我在dev_appserver中运行此代码时,它在第22行给出了“无效语法”错误,其中初始化了HugAPanda类。有人知道为什么会这样吗?这是代码:
import wsgiref.handlers
from google.appengine.ext import db
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
class PandasHugs(db.Model):
message = db.IntegerProperty()
class MainPage(webapp.RequestHandler):
def get(self):
ListOfHugs = db.GqlQuery("SELECT * FROM PandasHugs")
Adder = 0
for PandasHugs in ListOfHugs:
Adder = Adder + 1
self.response.out.write('<html><body>')
self.response.out.write('<h6>Panda has ' + str(Adder) + ' hugs!</h6>')
self.response.out.write("<form action=\"/HugPanda\" method=\"post\"><div><input type=\"text\" name=\"PandaMessage\" value=\"A message for a panda.\"></div><div><input type=\"submit\" value=\"Hug a panda?\"></div></form></body></html>">
class HugAPanda(webapp.RequestHandler):
def post(self):
HugForAPanda = PandaHugs()
HugForAPanda.message = self.request.get('PandaMessage')
HugForAPanda.put()
self.redirect('/main')
application = webapp.WSGIApplication(
[('/', MainPage), ('/main', MainPage), ('/HugPanda', HugAPanda)],
debug=True)
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()
再次感谢! -Neil
答案 0 :(得分:3)
上面一行中的语法无效。 (第15行看起来像)
self.response.out.write("<form action=\"/HugPanda\" method=\"post\"><div><input type=\"text\" name=\"PandaMessage\" value=\"A message for a panda.\"></div><div><input type=\"submit\" value=\"Hug a panda?\"></div></form></body></html>">
额外'&gt;'最后应该用')'替换。
这是遵循python约定并将行长度限制为79个字符的一个很好的理由。如果这是你组织的标准,我不会争论上升到120,但它肯定不应该按照它在这里呈现的方式编写:)
在这种情况下,我建议在三重引号中编写可读的html代码(即正确缩进)。在你的情况下,我会使用单个三重引号,所以你不必逃避每一个“。我只是在这里推荐单引号以避免混淆,但我相信”“”也适用于这种情况。
即
self.response.out.write('''<html>
<body>
<h6>Panda has %s hugs!</h6>
<form action="/HugPanda" method="post">
<div>
<input type="text" name="PandaMessage" value=
"A message for a panda.">
</div>
<div>
<input type="submit" value="Hug a panda?">
</div>
</form>
</body>
</html>''' % Adder)
刚刚注意到重写代码后html中的一些错误应该有'/&gt;'关闭输入标签。不使用任何工具,良好的风格可以在很大程度上避免错误!
答案 1 :(得分:2)
行的结尾
self.response.out.write("<form....da?\"></div></form></body></html>">
应替换为。
self.response.out.write("<form....da?\"></div></form></body></html>")
括号不平衡。此外,虽然这在语法上不是错误的,但你需要在整个文件中统一重新考虑缩进到4个空格。
快乐编码。