2011-01-06 11 views
7

मैं गूगल एप इंजन अजगर कोड में इस राशि बहु,GAE + जावास्क्रिप्ट धक्का: पुश करने के लिए

class ABC(db.Model): 
    StringA = db.StringProperty() 
    StringB = db.StringProperty(multiline=True) 

abcs = ABC.all() 
template_values = {'abcs': abcs,} 
path = os.path.join(os.path.dirname(__file__), 'index.html') 
self.response.out.write(template.render(path, template_values)) 

और इस index.html में,

<script type="text/javascript"> 
var string_A = []; 
var string_B = []; 

{% for abc in abcs %} 
string_A.push("{{ abc.StringA }}"); 
string_B.push("{{ abc.StringB }}"); //This doesn't work? 
{% endfor %} 
</script> 

मेरा प्रश्न है कि कैसे करने के लिए मैं multiline सरणी को धक्का ??

अग्रिम धन्यवाद।

+0

मल्टीलाइन जावास्क्रिप्ट पर थोड़ा सा मुश्किल है, स्ट्रिंग_B में '\ n' के साथ '\ n' को बदलना चाहिए। – systempuntoout

+0

केवल प्रतिस्थापित करने से \ n न्यूलाइन के लिए समस्या हल करेगा, लेकिन यह अन्य पात्रों (उदा। कोटायन अंक), और एक संभावित एक्सएसएस भेद्यता छोड़ देगा। – ehabkost

उत्तर

0

आप किस प्रकार की टेम्पलेटिंग लाइब्रेरी का उपयोग कर रहे हैं? मुझे लगता है कि ऑटो से बचने का मुद्दा है। यदि आप GAE पर Django tempalte का उपयोग कर रहे हैं तो आपको ऐसा करने की कोशिश करनी चाहिए।

<script type="text/javascript"> 
var string_A = []; 
var string_B = []; 

{% for abc in abcs %} 
string_A.push("{{ abc.StringA }}"); 
{%autoescape off} 
string_B.push("{{ abc.StringB }}"); 
{%endautoescape%} 
{% endfor %} 
</script> 

शुभकामनाएँ!

+0

मुझे नहीं लगता कि यह एक ऑटोस्केपिंग समस्या है, लेकिन मूल्यों से बचने के लिए * नहीं * का मुद्दा। – ehabkost

1

यदि आप जावास्क्रिप्ट अभिव्यक्ति उत्पन्न कर रहे हैं, तो आपको स्ट्रिंग से बचने के लिए सावधान रहना होगा ताकि आपको हमेशा एक वैध जावास्क्रिप्ट अभिव्यक्ति मिलती है और आप एक्सएसएस भेद्यता (यदि उपयोगकर्ताओं द्वारा तार प्रदान किए जाते हैं) पेश नहीं करते हैं। तुम एक जावास्क्रिप्ट स्ट्रिंग के लिए विशेष वर्ण से बचने के लिए addslashes Django टेम्पलेट फिल्टर का उपयोग कर सकते हैं:

string_B.push("{{ abc.StringB|addslashes }}"); 

एक वैकल्पिक समाधान json उपयोग करने के लिए एक सुरक्षित उत्पन्न करने के लिए है और ठीक से सभी डेटा आप में की आवश्यकता होगी युक्त जावास्क्रिप्ट अभिव्यक्ति भाग निकले जावास्क्रिप्ट कोड। GAE पर जेसन का उपयोग करने के बारे में this question देखें। json का उपयोग करके आप की तरह कुछ लिख सकते हैं:

from django.utils import simplejson as json 
class ABC(db.Model): 
    # [...] 
    def as_json(self): 
     return json.dumps({'StringA':self.StringA, 'StringB':self.StringB}) 

और टेम्पलेट पर:

<script type="text/javascript"> 
var abcs = []; 
{% for abc in abcs %} 
abcs.push({{ abc.as_json }}); 
{% endfor %} 
</script> 

इस तरह से आप सभी डेटा आप एक ही सरणी में एबीसी वस्तुओं से की आवश्यकता होगी मिलता है।

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