2011-01-06 11 views
7

Google App Engine Python kodunda bu var itmek satırlı, index.html içindeGAE'nin + JavaScript itme:

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

ve bu,

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

Benim sorum nasıl olduğunu Multilini diziye ittim?

Şimdiden teşekkürler.

+0

Multiline Javascript üzerinde biraz zor, string_B içinde '\ n' yerine '\' ile değiştirilmelidir. – systempuntoout

+0

Yalnızca \ n'leri değiştirmek, yeni satırlar için sorunu çözer, ancak diğer karakterleri (örneğin, kota işaretleri) ve olası bir XSS güvenlik açığını bırakır. – ehabkost

cevap

0

Ne tür bir şablon kitaplığı kullanıyorsunuz? Bence bu otomatik kaçma sorunu. GAE'de Django tempalte kullanıyorsanız bunu denemelisiniz.

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

İyi şanslar!

+0

Otomatik olarak kaçma sorunu olduğunu düşünmüyorum, ancak değerleri doğru şekilde atma * sorunu değil. – ehabkost

1

Bir Javascript ifadesi oluşturuyorsanız, her zaman geçerli bir Javascript ifadesi aldığınız ve bir XSS güvenlik açığı (dizeler kullanıcı tarafından sağlanırsa) sunmadığınız için dizeden kaçmaya dikkat etmeniz gerekir. Bir JavaScript dize için özel karakterleri kaçmayı addslashes Django şablon filtre kullanabilirsiniz:

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

alternatif bir çözüm güvenli bir oluşturmak için json kullanmaktır ve düzgün ihtiyaç duyacağınız tüm verileri içeren JavaScript ifadesini kaçtı Javascript kodu. Json on GAE kullanımı hakkında this question konusuna bakın.

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

Ve şablonuyla: gibi bir şey yazabilirsiniz json kullanarak

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

kişiyi tek dizide abc nesnelerden gerekir tüm verileri almak Bu şekilde.