【问题标题】:HTML printing is wrongHTML 打印错误
【发布时间】:2016-09-10 00:22:16
【问题描述】:

所以我已经看了一个多小时了,我无法弄清楚到底发生了什么。

脚本只打印一个 ">"

假设打印完整的HTML,然后在提交表单后打印“print_after”

import webapp2

class MainHandler(webapp2.RequestHandler):
def get(self):
    p = Page()

    if self.request.GET:
        name = self.request.GET['name']
        age = self.request.GET['age']
        time = self.request.GET['time']
        model = self.request.GET['model']
        radio = self.request.GET['trade']
        self.response.write(p.print_after(name, age, time, model, radio))
        print name + age + time + model + radio
    else:
        self.response.write(p.print_one)

class Page(object):
def __init__(self):
    self.page_body = '''
    <!DOCTYPE HTML>
        <html>
        <head>
        <meta charset="utf-8">
        <link rel="stylesheet" type="text/css" href="css/main.css">
        <title>Audi Test Drive Request</title>
        </head>
        <body>

<img src="assets/custom/images/logo.png" title="logo" alt="" width="200px" height="150px"/>

<h3>It's awesome that you want to test-drive one of our vehicles</h3>

<form method="GET" action="">

<label>Name</label>
<br>
<input type="text" name="name" required>
<br>
<label>Age</label>
<br>
<input type="text" name="age" required>
<br>
<label>Time</label>
<br>
<select name="time" required>
    <option value="12:00 PM">12:00 PM</option>
    <option value="12:30 PM">12:30 PM</option>
    <option value="1:00 PM">1:00 PM</option>
</select>
<br>
<label>Model</label>
<br>
<select name="model" required>
    <option value="2008 Audi A4">2008 Audi A4</option>
    <option value="2008 Audi S4">2008 Audi S4</option>
    <option value="2008 Audi RS4">2008 Audi RS4</option>
</select>
<br>
<label>Are you trading in a vehicle?</label>
<br>
<input type="radio" name="trade" value="yes" required>Yes<br>
<input type="radio" name="trade" value="no" required>No<br>
<br>
<input type="submit" value="Request Test Drive">

        </form>
</body>
</html>
'''
    self.page_after = '''
    <!DOCTYPE HTML>
        <html>
        <head>
        <meta charset="utf-8">
        <link rel="stylesheet" type="text/css" href="css/main.css">
        <title>Audi Test Drive Request</title>
        </head>
        <body>

<img src="assets/custom/images/logo.png" title="logo" alt="" width="200px" height="150px"/>

<h3>It's awesome that you want to test-drive one of our vehicles</h3>
</body
</html>
'''

def print_one(self):
    page_content = self.page_body
    page_content = page_content.format(**locals())
    return page_content

def print_after(self, name, age, time, model, radio):
    after_page_content = self.page_after
    after_page_content = after_page_content.format(**locals())
    return after_page_content

app = webapp2.WSGIApplication([
('/', MainHandler)
], debug=True)

【问题讨论】:

  • 请修复代码的缩进
  • page_content.format(**locals()) 这很丑陋、毫无意义、容易出错且难以调试。您通过键入而不是显式列出参数节省的 30 秒将在以后转换为数小时的调试时间。
  • 代码在我这边缩进正确,只是粘贴很奇怪。
  • (而且,由于提交的数据没有经过验证,将其注入到您的输出中将可以做一些有趣的事情,例如提交 &lt;script&gt;do_stuff() 作为名称 - 帮您自己和您的用户一个忙,使用适当的表单包,例如wtforms)。
  • 我编辑了那行,但脚本仍然没有从 self.page_body 打印 html。仍然使用 ">" 打印白页

标签: python class variables webapp2


【解决方案1】:

我测试了您的代码并对其进行了一些重新排列。我使用 http post 提交表单,然后打印表单变量。

import webapp2

class HelloWebapp2(webapp2.RequestHandler):
    def get(self):
        self.response.write('''<!DOCTYPE HTML>
        <html>
        <head>
        <meta charset="utf-8">
        <link rel="stylesheet" type="text/css" href="css/main.css">
        <title>Audi Test Drive Request</title>
        </head>
        <body>

<img src="assets/custom/images/logo.png" title="logo" alt="" width="200px" height="150px"/>

<h3>It's awesome that you want to test-drive one of our vehicles</h3>

<form method="POST" action="">

<label>Name</label>
<br>
<input type="text" name="name" required>
<br>
<label>Age</label>
<br>
<input type="text" name="age" required>
<br>
<label>Time</label>
<br>
<select name="time" required>
    <option value="12:00 PM">12:00 PM</option>
    <option value="12:30 PM">12:30 PM</option>
    <option value="1:00 PM">1:00 PM</option>
</select>
<br>
<label>Model</label>
<br>
<select name="model" required>
    <option value="2008 Audi A4">2008 Audi A4</option>
    <option value="2008 Audi S4">2008 Audi S4</option>
    <option value="2008 Audi RS4">2008 Audi RS4</option>
</select>
<br>
<label>Are you trading in a vehicle?</label>
<br>
<input type="radio" name="trade" value="yes" required>Yes<br>
<input type="radio" name="trade" value="no" required>No<br>
<br>
<input type="submit" value="Request Test Drive">

        </form>
</body>
</html>
''')
    def post(self): 
        if self.request.POST:
            name = self.request.POST['name']
            age = self.request.POST['age']
            time = self.request.POST['time']
            model = self.request.POST['model']
            radio = self.request.POST['trade']
            self.response.write(name +" " + age +" " + time +" " + model +" " + radio)

app = webapp2.WSGIApplication([
    ('/', HelloWebapp2),
], debug=True)

def main():
    from paste import httpserver
    httpserver.serve(app, host='127.0.0.1', port='8080')

if __name__ == '__main__':
    main()

上面的代码在 8080 端口启动了一个本地网络服务器。它可能不能完全满足你的要求,但有很多。您也可以在 appengine 中运行它。

【讨论】:

    猜你喜欢
    • 2012-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多