我目前正在开发一个应用程序,通过网页向用户提供所有类型的传感器数据。 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})
答案 0 :(得分:1)
就像评论所说的那样,代码中没有margin
,因此错误来自其他地方。但我猜这一切都与同一错误有关:{
和}
是format
的分隔符。因此,当您有{
和}
包围的JS或CSS块时,format
会将其视为占位符 - 这不是您想要的。
因此,在任何你真正需要真正大括号的地方,将它们加倍以使它们从format
解析中逃脱。即:
function print_array(code)
{{
switch (code)
{{
...
}}
}}