2011-01-06 2 views
7

나는 구글 앱 엔진 파이썬 코드에서이를 밀어 여러 줄의 index.html을에서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)) 

이,

<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

멀티 라인은 Javascript에서 다소 까다 롭습니다. string_B에서 '\ n'을 '\'로 바꾸면 작동합니다. – systempuntoout

+0

\ n을 바꾸는 것만으로 개행 문제를 해결할 수 있지만 다른 문자 (예 : 할당 부호) 및 잠재적 인 XSS 취약성이 남습니다. – 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

나는 autoescaping 문제라고 생각하지 않지만, 값을 제대로 벗어나지 못한다. – ehabkost

1

자바 스크립트 표현식을 생성하는 경우 문자열을 이스케이프 처리하여 올바른 자바 스크립트 표현식을 얻고 사용자가 문자열을 제공 할 경우 XSS 취약성을 도입하지 않도록주의해야합니다. 당신은 자바 스크립트 문자열 특수 문자를 탈출 addslashes 장고 템플릿 필터를 사용할 수 있습니다

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

대안 솔루션은 안전을 생성하는 JSON을 사용하는 것입니다 제대로 당신이에 필요한 모든 데이터를 포함하는 자바 스크립트 표현을 탈출 자바 스크립트 코드. GAE에서 json을 사용하는 방법은 this question을 참조하십시오.

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

그리고 템플릿에서 : 당신이 뭔가를 쓸 수 JSON을 사용하여

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

당신이 하나의 배열의 ABC 객체에서 필요한 모든 데이터를 얻을이 방법.