2012-08-14 45 views
8

Tôi biết JSON để giải quyết vấn đề này, nhưng tôi có vấn đề trong việc triển khai nó. Dưới đây là chi tiết của phương pháp của tôi:Gửi dữ liệu từ Python sang Javascript (JSON)

  1. dữ liệu được tính toán bằng Python
  2. Kể từ khi kích thước của dữ liệu là năng động, vì vậy tôi cần phải sử dụng JavaScript để tạo thêm hàng bảng HTML cho kết quả đầu ra của tôi. Kết quả là, tôi cần truyền dữ liệu từ Python sang JavaScript để cho phép Javascript 'xem' dữ liệu.

HTML Code (dưới đây là một phần của mã HTML của tôi để tạo trang đầu ra):

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) 

Mã JavaScript (tôi sử dụng JavaScript để tạo đầu vào bổ sung bảng trên filename bay: '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>  

Cảm ơn sự trợ giúp!

+0

Bạn có thể giải thích, tại sao chính xác là bạn đang cố truyền dữ liệu trong cùng một mẫu mà sau đó sẽ tạo mã HTML? Tôi không thấy bất kỳ tải động nào (như AJAX) trong câu hỏi của bạn, chỉ không phải mã JavaScript cần thiết sẽ tạo ra một phần của mẫu mà bạn không thể tạo bằng cách sử dụng Python. Tôi có đúng không? – Tadeck

+0

@Tadeck, lý do sử dụng JavaScript là vì tôi cần sử dụng JavaScript để tạo các bảng html. Ngoài ra, kích thước dữ liệu của tôi là động. Vì vậy, tôi nghĩ tốt hơn là sử dụng JSON để chuyển dữ liệu sang JavaScript và để cho nó xử lý nó. Ngoài ra, tôi cũng cần phải sử dụng Jqplot để tạo ra các số liệu. Hiện tại, tôi tạo tất cả các giá trị trong bảng html ẩn và cho phép JavaScript nhận chúng bằng cách chọn tên id. Nhưng tôi nghĩ rằng nên có một cách tốt hơn để làm điều này. –

+0

@Tao, dữ liệu có đang được cập nhật năng động không? Có nghĩa là người dùng sẽ thấy thay đổi dữ liệu khi đang di chuyển mà không cần làm mới trang? Nếu nó là động, bạn sẽ cần mã AJAX để yêu cầu dữ liệu JSON từ một URL chỉ trả về JSON (không có HTML). Nếu dữ liệu được biết khi trang được tải, thì bạn chỉ cần thêm cấu trúc dữ liệu JavaScript vào mẫu trang của bạn. Không yêu cầu JSON hoặc AJAX. – jiggy

Trả lời

11

bạn không cần phải "thực hiện" JSON, trăn đi kèm với một xây dựng trong lib, gọi simplejson, mà bạn có thể ăn với dicts bình thường:

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

EDIT: như tadeck chỉ ra , simplejson nên có nhiều up-to-date và không bằng json, nhưng có một cơ hội, simplejson là không có sẵn do nó được duy trì externaly

EDIT 2: 01.dựa trên các cuộc thảo luận trong câu trả lời này và các cuộc thảo luận trên trang, tôi nghĩ rằng, cách tiếp cận tốt nhất là một cái gì đó như thế:

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')); 
}); 

bạn sau đó có cấu trúc chính xác tương tự dict python của bạn có như là một đối tượng javascript.

+2

Thư viện chỉ là 'json' trong python2.6 trở lên. – stderr

+0

cảm ơn bạn đã cập nhật cho tôi, đã lâu rồi ... – DesertEagle

+0

Cảm ơn bạn đã đề xuất. Bạn có thể cho tôi một gợi ý về cách kết hợp json.dumps vào trường hợp của tôi (tôi có cần phải render nó không? Vì tôi cần cho phép JavaScript xem nó)? –

Các vấn đề liên quan