2015-06-04 3 views
0

У меня есть кнопка переключения на странице 'index.html'. Когда я нажимаю на него, он запускает скрипт cgi python, который изменяет состояние чего-то на моей малине.Отправьте результат скрипта cgi python на 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') 

И тогда я делать то, что я хочу сделать с моим arg1 ,

Теперь я хочу, когда вы откроете страницу веб-интерфейса, чтобы получить состояние компонента малины для инициализации переключателя в правильной позиции.

Для этого я отправляю форму на загрузку страницы, которая запускает скрипт, смотрящий на состояние компонента. Но как я могу получить его обратно в 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, а остальная часть может быть простой HTML в сочетании с javascripts. – Daan

Смежные вопросы