0

我正在尝试编写一个 Web 界面来开始录制或播放过程。我正在使用 web.py,并且在模板目录中有一个控制 python 脚本(code.py)和三个模板(main.html、record.html 和playback.html)。主页显示一个用于播放的表单和一个用于录制的表单,每个表单都有一个按钮,按下时会加载带有输入数据的相关模板。我希望能够取消这些过程并返回主屏幕,所以我有一个包含“取消”按钮的表单,该按钮在记录和回放模板中都呈现。但是,当我按下这个按钮时。什么都没发生。任何想法,将不胜感激。

代码.py:

import web
from web import form
import os
import glob
import socket

render = web.template.render('templates/',
     globals={'os':os, 'glob':glob, 'form':form})

urls = ('/*', 'index')

recordForm = form.Form(
    form.Dropdown(name = 'rmode',
        description='Recording Mode:',
        args=<a list of tupels>),
form.Button('Record'),
)


os.chdir("/home/stingray/Documents/")

playbackForm = form.Form(
form.Dropdown(name='pmode',
     description='Playback Mode:',
     args=<a list of tupels>),
form.Dropdown(name='pfile',
     description='Playback File:',
     args=[(file,file) for file in glob.glob("*.*")]),
form.Button('Playback'),
)

cancelForm = form.Form(
form.Button('Cancel'),
)

class index:
def GET(self):
    r = recordForm()
    p = playbackForm()
    return render.main(socket.gethostbyname(socket.gethostname()),
        'Not Present',r,p)

def POST(self):
    formData = web.input()
    c = cancelForm()
    try:
        return render.record(formData.rmode,c)
    except AttributeError:
        return render.playback(formData.pmode,formData.pfile,c)

if __name__ == "__main__":
app = web.application(urls, globals())
app.run()

main.html

$def with (ipAddress,linkStatus,recordForm,playbackForm)

<html>
<title>
    Test Bridge Control - Main
</title>
<body>
    <center>
        <b>Test Bridge Control</b><br><br>

        <form method="POST">
            $:recordForm.render()
        </form>

        <br>

        <form method="POST">
            $:playbackForm.render()
        </form>

        <br> 

        Test bridge IP address: $ipAddress<br>
        Link status: $linkStatus<br>
    </center>
</body>
</html>

记录.html

$def with (mode,cancelForm)

<html>
<title>
    Test Bridge Control - Record
</title>
<body>
    <center>
        Recording in mode $mode <br>

        <form method="POST">
            $:cancelForm.render()
        </form>

    </center>
</body>
</html>

而且playback.html 与record.html 非常相似。请注意,即使我没有验证表单数据,我仍然可以访问它 - 表单条目出现在呈现的 record.html 和回放.html 中。

[编辑] 可能应该强调类似问题的搜索没有成功;似乎没有其他人试图一个接一个地使用多种形式(或者如果他们是,他们正在成功)。

[编辑] 在 Fedora 中运行的 Firefox 18 中似乎不是问题,最初出现在 Windows 7 的 IE9 中,这可能是它必须工作的地方。

4

1 回答 1

0

原来这是一个IE问题。显然,除非明确说明,否则 IE9 不会将按钮视为“提交”类型。奇怪的是,main 中的按钮确实像提交一样工作,然后停止了。将 type="submit" 添加到按钮的声明后,所有现在都可以正常工作。

于 2013-09-24T09:30:32.890 回答