我正在编写一个简单的python脚本,如果在localhost上启动(使用apache),它将生成一个html页面。
我的脚本就是这个(test.py):
#!/usr/bin/python
# -*- coding: utf-8 -*-
import cgitb
cgitb.enable()
import cgi
form = cgi.FieldStorage()
print "Content-type: text/html\n\n"
x="hello"
y="world"
f= open('my.html', 'r').read()
print f.format(x=val1, y=val2)
这会打开一个html页面,在head元素中有一个简单的Javascript:
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Test html</title>
<script type="text/javascript">
$(document).ready(function() {
$("#select1").change(function() {
var selectedVal = $(this).find("option:selected").val();
$("#select2 option").removeAttr("disabled").removeAttr("selected");
$("#select2 option").each(function() {
if($(this).val() != selectedVal && $(this).val() != -1)
$(this).attr("disabled","disabled").removeAttr("selected");
});
});
});
</script>
</head>
身体中有很多代码。 当我运行test.py时,它说: Python脚本中出现问题。以下是导致错误的函数调用序列,按照它们发生的顺序。
/Library/WebServer/CGI-Executables/test.py in ()
181
182
184 f= open('my.html', 'r').read()
=> 185 print f.format(x=val1, y=val2)
f = '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN...\n </form>\n <hr>\n </body>\n</html>', f.format = <built-in method format of str object>, val1 = 0, val2 = '','
<type 'exceptions.KeyError'>: '\n\t\t\t $("#select1")'
args = ('\n\t\t\t $("#select1")',)
message = '\n\t\t\t $("#select1")'
但是,如果我删除Javascript python生成的HTML没有问题,但我需要该脚本。
如何在没有错误的情况下执行脚本?
答案 0 :(得分:1)
我认为问题是格式要求用两个法语括号之间的任何东西替换为你的一个格式字符串。在您的情况下,它会尝试查找
$("#select1").change(function() {
var selectedVal = $(this).find("option:selected").val();
$("#select2 option").removeAttr("disabled").removeAttr("selected");
$("#select2 option").each(function() {
if($(this).val() != selectedVal && $(this).val() != -1)
$(this).attr("disabled","disabled").removeAttr("selected");
作为你通过的kwargs的钥匙。此处列出的解决方案String format a JSON string gives KeyError是使用双括号。您的新html文件应该如下所示:
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Test html</title>
<script type="text/javascript">
$(document).ready(function() {{
$("#select1").change(function() {{
var selectedVal = $(this).find("option:selected").val();
$("#select2 option").removeAttr("disabled").removeAttr("selected");
$("#select2 option").each(function() {{
if($(this).val() != selectedVal && $(this).val() != -1)
$(this).attr("disabled","disabled").removeAttr("selected");
}});
}});
}});
</script>
</head>
(请注意从“{”到“{{”和“}”到“}}”的更改。)
如果您有任何后续问题/某些内容无效,请告诉我。