页面内容在表单发布后未显示,但在直接查看页面时显示。我有一个Python App Engine代码片段,它试图指向一个新页面并显示一个以编程方式定义的(即代码,而不是html)文本。然而,按下表单的提交按钮,我得到一个空白页面,没有错误消息。
我一直在使用Google App引擎代码示例。表单只是采取了一些选项,但我甚至没有从中收集任何东西,应该转到新页面,但它没有,我无法找出它可能出错的地方。
我有
class MainPage(webapp.RequestHandler):
def get(self):
path = os.path.join(os.path.dirname(__file__), 'index.html')
self.response.out.write(template.render(path, template_values))
和
class Confirm(webapp.RequestHandler):
def post(self):
self.response.headers['Content-Type'] = 'text/plain'
self.response.out.write('You have confirmed!')
application = webapp.WSGIApplication(
[('/', MainPage),
('/confirm', Confirm)],
debug=True)
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()
并在HTML中:index.html
<html>
<body>
<form action="/confirm" method="post">
<div><textarea name="content" rows="3" cols="60"></textarea></div>
<div><input type="submit" value="Submit"></div>
</form>
</body>
</html>
我想知道为什么如果我提交表格,我没有得到你已经确认!消息,但如果我去/确认我这样做。感谢。
答案 0 :(得分:1)
您的代码运行得非常顺利;可能你没有正确实现post
方法的一些奇怪的缩进错误(这可以解释405错误)。
复制并粘贴我的application.py
,然后重试:
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
class MainPage(webapp.RequestHandler):
def get(self):
path = os.path.join(os.path.dirname(__file__), 'index.html')
self.response.out.write(template.render(path, {}))
class Confirm(webapp.RequestHandler):
def post(self):
self.response.headers['Content-Type'] = 'text/plain'
self.response.out.write('You have confirmed!')
application = webapp.WSGIApplication(
[('/', MainPage),
('/confirm', Confirm)],
debug=True)
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()
答案 1 :(得分:0)
我会测试你的断言POST确认可以正确使用curl发布一些东西:
curl -v0 -F content = blah -F submit = submit'http://my-app.appspot.com/confirm'
如果工作正常,那么我会使用HttpFox(FF扩展名)来查看发送到服务器的内容。
似乎你要么没有提交你认为自己的东西,要么你的POST处理程序没有像你想象的那样工作。上述两个步骤都应该有助于澄清哪个是哪个。
答案 2 :(得分:0)
@Rusty我认为您应该更改表单提交方法以获取或发布,并确保您在application.py中也写了相同的内容。或者你可以做这样的事情
class Confirm(webapp.RequestHandler):
def post(self):
self.response.headers['Content-Type'] = 'text/plain'
self.response.out.write('You have confirmed!')
def get(self):
return Confirm.post(self)