9

この問題を解決するJSONは知っていますが、実装に問題があります。これが私のアプローチの詳細です:

  1. データはPythonで計算されます
  2. データのサイズは動的であるため、JavaScriptを使用して出力用の追加のHTMLテーブル行を作成する必要があります。その結果、Javascriptにデータを「表示」させるために、PythonからJavaScriptにデータを渡す必要があります。

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>    

助けてくれてありがとう!

4

1 に答える 1

11

JSONを「実装」する必要はありません。Pythonには、と呼ばれる組み込みのlibが付属しており、simplejson通常のdictでフィードできます。

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

編集: tadeckが指摘したように、simplejsonより最新であり、jsonと同等ではないはずですが、外部で維持されているため、simplejsonは利用できない可能性があります

編集2: この回答の議論とページの議論に基づいて、最善のアプローチは次のようなものになると思います:

Python

# [...] 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'));
});

これで、Pythondictがjavascriptオブジェクトとまったく同じ構造になります。

于 2012-08-14T20:08:19.643 に答える