2011-01-06 43 views
7

我在谷歌應用程序引擎Python代碼都這樣了,GAE +的Javascript推:多推

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> 

我的問題是,如何我推多行到數組??

在此先感謝。

+0

Multiline對Javascript有點棘手,用string_B中的'\'替換'\ n'應該可以工作。 – systempuntoout 2011-01-06 16:19:55

+0

只有替換\ n才能解決換行問題,但會留下其他字符(例如配額標記)和潛在的XSS漏洞。 – ehabkost 2011-01-12 12:35:53

回答

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> 

祝你好運!

1

如果您正在生成Javascript表達式,則需要小心轉義該字符串,以便始終獲得有效的Javascript表達式,並且不會引入XSS漏洞(以防字符串由用戶提供)。您可以使用addslashes Django的模板過濾器,以逃避特殊字符的JavaScript字符串:

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

另一種解決方案是使用JSON來生成一個安全和正確轉義包含你需要的所有數據JavaScript表達式Javascript代碼。有關在GAE上使用json,請參見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> 

這樣,你得到你需要在一個陣列從ABC對象的所有數據。