Я пытаюсь написать веб-интерфейс, чтобы начать процесс записи или воспроизведения. Я использую web.py и имею один управляющий скрипт python (code.py) и три шаблона (main.html, record.html и playback.html) в каталоге шаблонов. На главной странице показана форма для воспроизведения и форма для записи, каждая с кнопкой, которая загружает соответствующий шаблон с введенными данными при нажатии. Я хотел бы иметь возможность отменить эти процессы и вернуться на главный экран, поэтому у меня есть форма, содержащая кнопку "Отмена", которая отображается как в шаблонах записи, так и в воспроизведении. Однако, когда я нажимаю эту кнопку. Ничего не произошло. Любые идеи были бы хорошы.
code.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>
record.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. Обратите внимание, что хотя я не проверяю данные формы, я все равно могу получить к ней доступ - записи формы появляются в rendered.html и playback.html.
[РЕДАКТИРОВАТЬ] Следует, вероятно, подчеркнуть, что поиск похожих вопросов не был успешным; никто другой, кажется, не пытается использовать несколько форм один за другим (или, если они есть, они преуспевают).
[РЕДАКТИРОВАТЬ] Не кажется, что проблема в Firefox 18 работает в Fedora, изначально увиденная в IE9 в Windows 7, что, вероятно, должно работать.
Оказывается, это была проблема IE. По-видимому, IE9 не рассматривает кнопки как тип "submit", если явно не указано. Необычно кнопки в главном режиме работали как подчиненные, затем останавливались. Все теперь работают после добавления type = "submit" к объявлению кнопки.