2013-12-08 110 views
0

我在編寫一個簡單的python腳本,如果在localhost上啓動(使用apache),它將生成一個html頁面。生成HTML頁面的Python腳本

我的劇本是這樣的(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) 

這樣就打開了在頭元件有一個簡單的JavaScript的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> 

隨着在大量的代碼身體。 當我運行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

你覺得'f.format(x = val1,y = val2)'是做什麼的? – SLaks

+0

它在輸入框「val1」處分配字符串「x」。 y和val2也是一樣。 val1和val2在HTML正文中聲明!這只是一個測試,但我如何執行JavaScript? –

+0

確保Javascript看起來不像破損的格式字符串,因爲錯誤告訴你。另外,你有一個XSS洞。 – SLaks

回答

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> 

(注意從變化 '{' 到 '{{' 和 '}' 到 '}}'。)

讓我知道如果你有任何後續問題/一些不起作用。

+0

它工作!謝謝! :d –