Последовательные формы в web.py

0

Я пытаюсь написать веб-интерфейс, чтобы начать процесс записи или воспроизведения. Я использую 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, что, вероятно, должно работать.

Теги:
templates
forms
web.py

1 ответ

0
Лучший ответ

Оказывается, это была проблема IE. По-видимому, IE9 не рассматривает кнопки как тип "submit", если явно не указано. Необычно кнопки в главном режиме работали как подчиненные, затем останавливались. Все теперь работают после добавления type = "submit" к объявлению кнопки.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню