将数据从Python发送到Javascript(JSON)

时间:2012-08-14 20:03:52

标签: javascript python json

我知道JSON可以解决这个问题,但我在实现它时遇到了问题。以下是我的方法的详细信息:

  1. 数据以Python计算
  2. 由于数据大小是动态的,因此我需要使用JavaScript为输出创建额外的HTML表行。因此,我需要将数据从Python传递给JavaScript,让Javascript“看到”数据。
  3. HTML代码(下面是我创建输出页面的HTML代码的一部分):

    class OutputPage(webapp.RequestHandler):
        def func (a,b):
            return a+b #just an example
    
        def get(self):
            form = cgi.FieldStorage() 
            chem_name = form.getvalue('chemical_name')
            Para1 = form.getvalue('Para1')  #get values from input page--user inputs
            Para1 = float(Para1)
            Para2 = form.getvalue('Para2')  #get values from input page--user inputs
            Para2 = float(Para2)
            out = func (Para1,Para1)
            out_json=simplejson.dumps(out)  # I need to send out to JavaScript
            #writ output page
            templatepath = os.path.dirname(__file__) + '/../templates/'
            html = html + template.render (templatepath + 'outputpage_start.html', {})
            html = html + template.render (templatepath + 'outputpage_js.html', {})               
            html = html + """<table width="500" class='out', border="1">
                              <tr>  
                                <td>parameter 1</td>
                                <td>&nbsp</td>                            
                                <td>%s</td>
                              </tr>
                              <tr>  
                                <td>parameter 2</td>
                                <td>&nbsp</td>                            
                                <td>%s</td>
                              </tr>                                                      
                              </table><br>"""%(Para1, Para2)
            html = html + template.render(templatepath + 'outputpage_end.html', {})
            #attempt to 'send' Python data (out_json) to JavaScript, but I failed.
            html = html + template.render({"my_data": out_json})  
            self.response.out.write(html)
    
    app = webapp.WSGIApplication([('/.*', OutputPage)], debug=True)
    

    JavaScript代码(我使用JavaScript在即时文件名上创建其他输入表:'outputpage_js.html'):

    <script>
    <script type='text/javascript'> 
    
    $(document).ready(function(){
        //I assume if my Json statement works, I should be able to use the following argument to create a HTML row
        $('<tr><td>Parameter 2</td><td>&nbsp</td><td>out_json</td>').appendTo('.app')   
    
    </script>    
    

    感谢您的帮助!

1 个答案:

答案 0 :(得分:11)

你不必“实现”JSON,python附带一个内置的lib,名为simplejson,你可以用普通的dicts提供:

try: 
  import simplejson as json
except:
  import json
out = {'key': 'value', 'key2': 4}
print json.dumps(out)

修改 正如tadeck指出的那样,simplejson 应该更新,并且不等于json,但是有一个机会,simplejson因为它被保持为externaly而无法使用

编辑2: 基于这个答案的讨论和页面上的讨论,我认为,最好的方法是这样的:

# [...] generate dynamic data [...]
html = html + template.render (templatepath + 'outputpage_start.html', {})
html = html + template.render (templatepath + 'outputpage_js.html', {})               
html = html + """<table width="500" class='out' border="1" data-dynamic="%s">""" % json.dumps(your_generated_data_dict)
#tr/td elements and templating as needet
self.response.out.write(html)

的javascript

$(function(){
    var your_generated_table = $('table'),
        dynamic_data = JSON.parse(your_generated_table.attr('data-dynamic'));
});

然后你的python dict具有与javascript对象完全相同的结构。