2012-08-14 66 views
8

私はこの問題を解決するためにJSONを知っていますが、実装に問題があります。ここに私のアプローチの詳細は以下のとおりです。PythonからJavascript(JSON)にデータを送信

  1. データのサイズが動的であるので、私は私の出力のための余分なHTMLテーブルの行を作成するためにJavaScriptを使用する必要があるため、データはPython
  2. で計算されています。その結果、私はPythonからJavaScriptにデータを渡して、Javascriptにデータを '参照'させる必要があります。 HTMLコード

(以下、出力ページを作成するために私のHTMLコードのセクションです):「outputpage_js:

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を使用しています。 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>  

ありがとうございます!

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

EDIT: tadeckが指摘したように、あなたがJSONを "実装" する必要はありません

+0

なぜ、正確にHTMLコードを生成する同じテンプレートでデータを渡そうとしていますか?あなたの質問には動的ロード(AJAXのような)はありません。Pythonを使って生成できなかったテンプレートの一部を生成するJavaScriptコードは必要ありません。私は正しいですか? – Tadeck

+0

@Tadeck、JavaScriptを使用する理由は、JavaScriptを使用してhtmlテーブルを作成する必要があるためです。さらに、私のデータのサイズは動的です。 JSONを使ってJavaScriptにデータを渡し、それを処理させる方が良いと思います。また、Jqplotを使用して数値を生成する必要もあります。現在、私は隠されたhtmlテーブルのすべての値を生成し、idネームを選択してJavaScriptを取得させます。しかし、私はこれを行うためのよりよい方法があるべきだと思います。 –

+0

@Taoは、動的に更新されるデータですか?ユーザーは、ページを更新しなくてもデータの変更をその場で見ることができますか?動的な場合は、JSON(HTMLなし)を返すURLからJSONデータをリクエストするには、AJAXコードが必要です。ページが読み込まれたときにデータがわかっている場合は、JavaScriptデータ構造をページテンプレートに追加するだけです。 JSONまたはAJAXは必要ありません。 – jiggy

答えて

11

、Pythonはあなたが通常のdictsを養うことができ、simplejsonと呼ばれる、libに内蔵されています:それは

EDIT 2 externaly維持されているが原因で、のsimplejson JSONに等しくない場合に、最新でよりも、しかし、チャンスがあるはずです、のsimplejsonは使用できません。この回答やページに関する議論での議論をもとに、私が思うに、最善のアプローチは、そのようなものになるだろう:

パイソン

# [...] 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オブジェクトと同じ構造を持っています。

+2

ライブラリはpython2.6以降では 'json'です。 – stderr

+0

私を更新してくれてありがとう、それはしばらくしていた... – DesertEagle

+0

提案のおかげで。 json.dumpsを私のケースに組み込む方法のヒントを教えてください(私はそれをレンダリングする必要がありますか?私はJavaScriptにそれを見せる必要があるので)? –

関連する問題