我正在尝试编写一个 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 中,这可能是它必须工作的地方。