Python HTML格式问题

时间:2014-05-01 18:45:50

标签: python cgi

我目前正在开发一个应用程序,通过网页向用户提供所有类型的传感器数据。 Python-CGI用于动态创建HTML和JavaScript代码。

在创建它之前,python脚本使用str.format()将一些数据插入到html中。

为了简单起见,我省略了一些代码。

page_source = """   
<!DOCTYPE html>
    <html>

    ...

            function print_array(code)
            {
                switch (code)
                {
                   case '001':
                       SetValueVisibilty('Buttonspan', {0})
                       break
                   case '002':
                          SetValueVisibilty('Ultraspan', {1})
                       break
                   case '003':  
                          SetValueVisibilty('Gasspan', {2})
                       break;
                   case '004':  
                          SetValueVisibilty('Vib1span', {3}) 
                       break
                   case '005': 
                          SetValueVisibilty('Vib2span', {4}) 
                       break
                   case '006':   
                       SetValueVisibilty('Soundspan', {5})      
                       break
                   case '007': 
                       SetValueVisibilty('Lightspan', {6})   
                       break
                   default: 
                       alert('No Sensor');
                       break
                }                
            }

            </script>                            
            <center>
            <ul id='Sensors'>   
            <li id='Button'>          
            <INPUT type='button' value='Button' onMouseOver='return print_array('001')' onMouseOut='clearspan('Buttonspan')'/>
            <span class='invisiblespans' id='Buttonspan'></span>              
            </li>      

        ...

    </body>
    </html>""".format(get_five_entries("001"),get_five_entries("002"),get_five_entries("003"),get_five_entries("004"),get_five_entries("005"),get_five_entries("006"),get_five_entries("007"))

 page_source = """  
<!DOCTYPE html>
    <html>

    ...

            function print_array(code)
            {
                switch (code)
                {
                   case '001':
                       SetValueVisibilty('Buttonspan', {0})
                       break
                   case '002':
                          SetValueVisibilty('Ultraspan', {1})
                       break
                   case '003':  
                          SetValueVisibilty('Gasspan', {2})
                       break;
                   case '004':  
                          SetValueVisibilty('Vib1span', {3}) 
                       break
                   case '005': 
                          SetValueVisibilty('Vib2span', {4}) 
                       break
                   case '006':   
                       SetValueVisibilty('Soundspan', {5})      
                       break
                   case '007': 
                       SetValueVisibilty('Lightspan', {6})   
                       break
                   default: 
                       alert('No Sensor');
                       break
                }                
            }

            </script>                            
            <center>
            <ul id='Sensors'>   
            <li id='Button'>          
            <INPUT type='button' value='Button' onMouseOver='return print_array('001')' onMouseOut='clearspan('Buttonspan')'/>
            <span class='invisiblespans' id='Buttonspan'></span>              
            </li>      

        ...

    </body>
    </html>""".format(get_five_entries("001"),get_five_entries("002"),get_five_entries("003"),get_five_entries("004"),get_five_entries("005"),get_five_entries("006"),get_five_entries("007"))

函数get_five_entries()返回一个字符串。

我在apache服务器和cli上都尝试了这个,但我总是得到一个KeyError:

  

KeyError:&#39; \ n margin&#39;

我认为这可能是由于滥用引号造成的,所以我将它们全部改为单引号,但仍然没有成功。

有人可以给我一个提示来解决这个问题吗?! UPDATE:

def get_five_entries(column_code):

statusCodes = {'001':'Button', '002':'Ultra Sonic Sensor', '003':'Gas Sensor',                                
                '004':'Vibration Sensor 1','005':'Vibration Sensor 2', '006':'Sound Sensor', '007':'Light Sensor'}    

if column_code in statusCodes:   
...
   curs.execute("SELECT * FROM Log WHERE Code=:Code",{"Code":column_code}) 

1 个答案:

答案 0 :(得分:1)

就像评论所说的那样,代码中没有margin,因此错误来自其他地方。但我猜这一切都与同一错误有关:{}format的分隔符。因此,当您有{}包围的JS或CSS块时,format会将其视为占位符 - 这不是您想要的。

因此,在任何你真正需要真正大括号的地方,将它们加倍以使它们从format解析中逃脱。即:

function print_array(code)
{{
    switch (code)
    {{
        ...
    }}
}}