2011-07-07 12 views
5

मैं FlaskJinja2 के साथ templating भाषा के रूप में उपयोग कर रहा हूँ।Jinja2: बहुआयामी जावास्क्रिप्ट सरणी कैसे बनाएं?

आप Jinja2 का उपयोग कर जावास्क्रिप्ट में एक बहुआयामी पायथन संरचना को एक समान संरचना में कैसे परिवर्तित करते हैं?

उदाहरण (अजगर/बोतल):

pyStruct = [{key1:value1, key2:value2, [{subkey1:subvalue1, subkey2:subvalue2,}]}, 
      {key1:value1, key2:value2, [{subkey1:subvalue1, subkey2:subvalue2,}]},] 

render_template('jinjatemplate.html', pyStruct=pyStruct) 

उदाहरण (Jinja2):

?? 

मुझे लगता है कि मैं क्या पूछ रहा हूँ है, यह केवल में जटिल पाश निर्माणों बनाने के द्वारा किया जा सकता है Jinja2, या मैं कहीं शॉर्टकट याद कर रहा हूँ?

यदि उत्तर है, हाँ, किसी को जिन्जा 2 में घुलनशील लूप का उपयोग करना है, तो संभवतः पाइथन में सीधे जावास्क्रिप्ट कोड बनाना और इसे Jinja2 में शामिल करने के लिए बहुत आसान है।

लेकिन उस Jinja2 की तरह एक टेम्पलेट भाषा का प्रयोग का उद्देश्य विफल हो रहा है कुछ हद तक ...

मैंने कोशिश की (Jinja2):

{{ pyStruct|safe }} 

... और यह वास्तव में कुछ भी नहीं के रूप में लंबे समय के रूप में काम करता है यूनिकोड है, और असीसी भूमि से बाहर नहीं निकलता है (जो आमतौर पर मेरे मामले में करता है)।

ओह, और यदि आपको आश्चर्य है कि इस तरह की संरचना क्यों पास की जाती है? मुझे लगता है कि मैं अक्सर मेनू और अन्य जटिल चयन इंटरफेस द्वारा उपयोग किए जाने वाले जावास्क्रिप्ट को काफी जटिल संरचनाएं पारित करना चाहता हूं।

उत्तर

7

आप json मॉड्यूल का उपयोग कर सकते हैं, या तो जिन्जा फ़िल्टर कहां json.dumps() के परिणामों को सीधे अपने टेम्पलेट में पास कर सकते हैं।

pyStruct = [{key1:value1, key2:value2, [{subkey1:subvalue1, subkey2:subvalue2,}]}, 
      {key1:value1, key2:value2, [{subkey1:subvalue1, subkey2:subvalue2,}]},] 

render_template('jinjatemplate.html', json_struct=json.dumps(pyStruct)) 

टेम्पलेट में:

var myStruct = ({{ json_struct|e }}); 

चेतावनी: मैं भागने बिट के बारे में थोड़ा अनिश्चित हूँ (| ई फिल्टर)। आप यह जांचना चाहेंगे कि <,>, & वर्ण एक्सएमएल इकाइयों की बजाय यूनिकोड एस्केप अनुक्रमों से ठीक से बच गए हैं।

+0

धन्यवाद जेडी (और Björn!), जो मेरी समस्या को सुन्दरता से हल करता है! – herira

2

json का उपयोग कर इसे क्रमानुसार:

from django.utils import simplejson 

pyStruct = [{'key1':'value1', 
      'key2':'value2', 
      'key3':[{'subkey1':'subvalue1', 'subkey2':'subvalue2'}]}, 
      {'key1':'value1', 
      'key2':'value2', 
      'key3':[{'subkey1':'subvalue1', 'subkey2':'subvalue2'}]}] 
print simplejson.dumps(pyStruct) 

बोतल संभावना डेटा को क्रमानुसार JSON करने के लिए एक बराबर तरीका है। यह भी जिन्जा 2 में लूप संरचनाओं का उपयोग करके किया जा सकता है, लेकिन जेसन का उपयोग करने से कई बार धीमा है।