2012-08-14 11 views
8

से डेटा भेजें मुझे इस समस्या को हल करने के लिए JSON पता है, लेकिन मुझे इसे लागू करने में समस्याएं हैं। यहाँ मेरी दृष्टिकोण का विस्तार है:पायथन से जावास्क्रिप्ट (JSON)

  1. डाटा अजगर
  2. के बाद से डेटा का आकार गतिशील है में गणना कर रहे हैं, इसलिए मैं अपने आउटपुट के लिए अतिरिक्त HTML तालिका पंक्तियों बनाने के लिए JavaScript का उपयोग करने की जरूरत है। नतीजतन, मुझे डेटा को 'देखने' के लिए जावास्क्रिप्ट को जाने के लिए पायथन से जावास्क्रिप्ट तक डेटा पास करने की आवश्यकता है।

एचटीएमएल कोड (नीचे उत्पादन पृष्ठ बनाने के लिए मेरी 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) 

जावास्क्रिप्ट कोड (मैं जावास्क्रिप्ट का उपयोग मक्खी फ़ाइल नाम पर अतिरिक्त जानकारी के तालिकाएं बनाने के लिए: 'outputpage_js। एचटीएमएल '):

<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) 

संपादित करें: रूप tadeck ने बताया

+0

क्या आप समझा सकते हैं, आप उसी टेम्पलेट में डेटा को पारित करने का प्रयास क्यों कर रहे हैं जो HTML कोड उत्पन्न करेगा? मुझे आपके प्रश्न में कोई गतिशील लोडिंग (जैसे AJAX) दिखाई नहीं दे रहा है, केवल आवश्यक जावास्क्रिप्ट कोड नहीं है जो उस टेम्पलेट का हिस्सा उत्पन्न करेगा जिसे आप पाइथन का उपयोग करके उत्पन्न नहीं कर पाएंगे। क्या मैं सही हूँ? – Tadeck

+0

@Tadeck, जावास्क्रिप्ट का उपयोग करने का कारण यह है क्योंकि मुझे HTML टेबल बनाने के लिए जावास्क्रिप्ट का उपयोग करने की आवश्यकता है। इसके अलावा, मेरे डेटा का आकार गतिशील है। तो मुझे लगता है कि जावास्क्रिप्ट को डेटा पास करने के लिए JSON का उपयोग करना बेहतर है और इसे इसे संभालने दें। इसके अलावा, मुझे आंकड़े उत्पन्न करने के लिए जेक्प्लॉट का उपयोग करने की भी आवश्यकता है। वर्तमान में, मैं एक छिपी हुई HTML तालिका में सभी मान उत्पन्न करता हूं और आईडी नामों का चयन करके उन्हें प्राप्त करने देता हूं। लेकिन मुझे लगता है कि ऐसा करने का एक बेहतर तरीका होना चाहिए। –

+0

@ टाओ, डेटा गतिशील रूप से अद्यतन है? मतलब क्या उपयोगकर्ता बिना किसी पृष्ठ रीफ्रेश के फ्लाई पर डेटा परिवर्तन देखेगा? यदि यह गतिशील है, तो आपको JSON डेटा को उस URL से अनुरोध करने के लिए AJAX कोड की आवश्यकता होगी जो केवल JSON (HTML नहीं) लौटाता है। यदि पृष्ठ लोड होने पर डेटा ज्ञात होता है, तो आपको केवल अपने पृष्ठ टेम्पलेट में जावास्क्रिप्ट डेटा संरचना जोड़ने की आवश्यकता है। कोई JSON या AJAX आवश्यक नहीं है। – jiggy

उत्तर

11

आप "को लागू करने के लिए" JSON की जरूरत नहीं है, अजगर के साथ एक lib में बनाया, simplejson कहा जाता है, जो आपको सामान्य dicts साथ फ़ीड कर सकते हैं आता है:, 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) 

जावास्क्रिप्ट

$(function(){ 
    var your_generated_table = $('table'), 
     dynamic_data = JSON.parse(your_generated_table.attr('data-dynamic')); 
}); 
:इस जवाब में चर्चा और पृष्ठ पर चर्चा के आधार पर, मुझे लगता है, सबसे अच्छा तरीका ऐसा ही कुछ होगा

तब आपके पास एक ही समान संरचना है जो आपके पायथन निर्देश को जावास्क्रिप्ट ऑब्जेक्ट के रूप में है।

+2

पुस्तकालय सिर्फ python2.6 और ऊपर में 'json' है। – stderr

+0

मुझे अपडेट करने के लिए धन्यवाद, यह थोड़ी देर हो गया है ... – DesertEagle

+0

सुझाव के लिए धन्यवाद। क्या आप मुझे मेरे मामले में json.dumps को गठबंधन करने के बारे में एक संकेत दे सकते हैं (क्या मुझे इसे प्रस्तुत करने की आवश्यकता है? चूंकि मुझे इसे देखने के लिए जावास्क्रिप्ट को जाने की आवश्यकता है)? –

संबंधित मुद्दे