2015-06-04 30 views
0

我在頁面'index.html'上有一個切換按鈕。當我點擊它時,它會執行一個python cgi腳本來改變我的樹莓上的某些東西的狀態。將python cgi腳本的結果發送到HTML

要做到這一點,我這樣做:

HTML:

<form id="tgleq" method="POST" action="/cgi-bin/remote.py" target="python_result"> 
<input id="toggle-eq" type="checkbox" data-toggle="toggle" name="toggle-eq" value=""> 

<script> 
$(function() { 
    $('#toggle-eq').change(function() { 
    tgl_state = $('#toggle-eq').prop("checked") 
    var toggle = document.getElementById("toggle-eq"); 
    toggle.value = tgl_state; 
    document.getElementById("tgleq").submit(); 
    }) 
}) 
</script> 

CGI:

#!/usr/bin/env python 

import cgi 
import cgitb 

cgitb.enable() 

print "Content-type: text/html\n\n" 
print 

form=cgi.FieldStorage() 
arg1 = form.getvalue('toggle-eq') 

然後我做什麼,我想用我的AR​​G1做。

現在,我想要的是,當您打開Web界面頁面時,獲取樹莓組件的狀態以在正確的位置初始化切換。

爲此,我在頁面加載時發送一個表單,以啓動一個查看組件狀態的腳本。但是我怎樣才能把它恢復到html?

我試過urllib和httplib2,但沒有爲我工作......任何建議?

感謝

+0

爲什麼要使用這些?您需要充當服務器,而不是客戶端。 –

+0

對不起,我不明白你的意思...應該扮演服務器的角色? – Corentoulf

回答

0

如果我理解你的問題正確,您希望顯示在網頁上的切換元件的當前狀態。 目前看起來你有一個純粹的HTML頁面和一個CGI頁面,所以我認爲你有多種選擇,其中之一就是將HTML和CGI組合成一個頁面。

下面的代碼是這個想法的一個例子,可能無法正常工作,所以不是複製/粘貼解決方案。

#!/usr/bin/env python 
import cgi 
import cgitb 

cgitb.enable() 
print "Content-type: text/html\n\n" 
print 
active=""" 
<form id="tgleq" method="POST" action="/cgi-bin/remote.py" target="python_result"> 
<input id="toggle-eq" type="checkbox" data-toggle="toggle" name="toggle-eq" value=""> 
""" 
inactive=""" 
<form id="tgleq" method="POST" action="/cgi-bin/remote.py" target="python_result"> 
<input id="toggle-eq" type="checkbox" data-toggle="toggle" name="toggle-eq" value="checked"> 
""" 
generic = """ 
<script> 
$(function() { 
    $('#toggle-eq').change(function() { 
    tgl_state = $('#toggle-eq').prop("checked") 
    var toggle = document.getElementById("toggle-eq"); 
    toggle.value = tgl_state; 
    document.getElementById("tgleq").submit(); 
    }) 
}) 
</script> 
""" 

def set_state(option): 
    if (option==True): 
     actual_state_Setting_here = 1 # <-magic happens here 
    else: 
     actual_state_Setting_here = 0 # <-magic happens here 

def get_state(): 
    return actual_state_Setting_here # <- read actual value here 

form = cgi.FieldStorage() 
if (form.getvalue('toggle-eq')=="checked"): 
    set_state(True) 
else: 
    set_state(False) 

if (get_state()==True): 
    print(active) #show as currently active 
else: 
    print(inactive) #show as currently inactive 
print(generic) #show rest of the page 
+0

謝謝你的回覆。的確,這可能是一個很好的做法。但是恐怕我的網頁代碼將來會變得更加複雜一些,並且很難將其應用到python腳本中。你認爲相反是可能的嗎? – Corentoulf

+0

這是一個快速和基本的例子,你可以更乾淨地構造一切,這樣可以維護。如果你用其他語言編寫它,你將會遇到同樣的問題。 Python結構緊湊,乾淨,非常適合做這件事。構建一些用於切換內容的基本腳本,使其成爲REST服務,其餘部分可以是與javascripts結合的純HTML格式。 – Daan