2013-09-23 28 views
0

我正在嘗試編寫一個Web界面來開始錄製或播放過程。我使用web.py,並在模板目錄中有一個控制python腳本(code.py)和三個模板(main.html,record.html和playback.html)。主頁面顯示了一個播放窗體和一個記錄窗體,每個窗體都有一個按鈕,當按下該按鈕時,該窗體將輸入的數據載入相關模板。我希望能夠取消這些過程並返回到主屏幕,所以我有一個包含「取消」按鈕的表單,該按鈕在記錄和回放模板中都呈現。但是,當我按下這個按鈕。什麼都沒發生。任何想法,將不勝感激。web.py中的順序格式

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。請注意,即使我沒有驗證表單數據,我仍然可以訪問它 - 表單條目出現在呈現的record.html和playback.html中。

[編輯]應該強調的是,搜索類似的問題還沒有成功;沒有人似乎試圖一個接一個地使用多種形式(或者如果他們是,他們成功了)。

[編輯]沒有出現在Fedora的運行在Firefox 18中的問題,最初見於IE9在Windows 7中,這可能是它會在工作。

回答

0

原來這是一個IE問題。顯然,除非明確說明,否則IE9不會將按鈕視爲「提交」類型。奇怪的是,主要的按鈕確實工作,因爲提交然後停止。現在所有人都在向按鈕的聲明中添加type =「submit」之後工作。