2014-11-23 5 views
4

저는 Python 코드를 사용하여 jinja를 사용하여 Flask의 템플릿에 데이터를 보냅니다. HTML로 찾은 코드에 액세스 할 수 있지만 Javascript로 데이터를 표시하려고하면 작동하지 않습니다.jinja를 사용하여 데이터를 자바 스크립트로 전송

name = "Steve" 
return render_template('simple.html',data=json.dumps(name)) 

그리고 내 simple.html 코드에서 HTML 본문 : 예를 들어 가 여기 내 파이썬 코드의 예기치 않은 토큰 '&'

<script> 
var name = {{ data }}; 
alert(name); 
</script> 

내 콘솔의 오류가 구문 에러 "라는 "

나는이 문제를 전에 보았다. 나는 그것을 어떻게 해결할 지 잊고있다.

답변

7

신경 쓰지 마세요. 나는 코드를 벗어나는 데 안전 할 필요가 있었다. 예 :

<script> 
var name = {{ data|safe }}; 
alert(name); 
</script> 
4

플라스크는 내장 필터 tojson을 얻었다. 그러므로 우리는 할 수 있습니다

플라스크 :

data = { 
    "firstname": "Steve", 
    "lastname": "Jobs" 
} 
return render_template('simple.html', data=data) 

jinja2 :

<script type="text/javascript"> 
var data = {{ data | tojson }}; 
console.log(data); 
</script> 
+1

모든 유효한 JSON이 유효 JS이기 때문에 당신은 실제로 완전히 그냥 수행 'JSON.parse' 단계를 건너 뛸 수 있습니다 'var data = {{data | tojson}}; –

+0

이 작업을 수행하면 코드를보다 안전하게 보이게 할뿐만 아니라 json 문자열을 JS 객체로 파싱합니다. 그리고 JS 객체는 파이썬에서 dict와 동등합니다. – aGuegu

+0

JSON 객체가 스크립트 블록에 쓰여질 때 ('var data = {{data | tojson}}'처럼) 브라우저에서 JavaScript로 해석됩니다. JSON은 JavaScript의 하위 집합이므로 스크립트 블록에 쓰여진 "JSON"은 브라우저에서 일반 JavaScript 객체로 해석됩니다 (JSON은 데이터이므로 모든 사용자를 작성하는 것이 아니라 안전합니다). - 제공 한 문자열을 안전하지 않은 스크립트 블록에 넣습니다. "JSON"을 JavaScript 문자열로 JSON.parse에 전달하는 것은 불필요한 단계를 추가하는 것입니다. 말이 돼? –

관련 문제