> 웹 프론트엔드 > JS 튜토리얼 > Jinja 템플릿에서 JSON 데이터를 렌더링할 때 JSON.parse가 'SyntaxError: 예기치 않은 토큰 '&''과 함께 실패하는 이유는 무엇입니까?

Jinja 템플릿에서 JSON 데이터를 렌더링할 때 JSON.parse가 'SyntaxError: 예기치 않은 토큰 '&''과 함께 실패하는 이유는 무엇입니까?

DDD
풀어 주다: 2024-12-29 12:26:17
원래의
1005명이 탐색했습니다.

Why Does JSON.parse Fail with a

Jinja 템플릿에서 JSON 데이터를 렌더링할 때 JavaScript 구문 오류가 발생했습니다.

문제 설명

JavaScript를 사용하여 Jinja 템플릿에서 렌더링된 JSON 데이터를 반복하려고 하면, 브라우저에서 "SyntaxError: 예기치 않은 토큰 '&'" 오류가 발생합니다. 렌더링된 데이터에 대해 JSON.parse를 호출할 때 문제가 발생합니다.

해결책

Flask의 템플릿 이스케이프

Flask의 Jinja 환경은 보안을 완화하기 위해 템플릿에서 렌더링된 데이터에 자동 HTML 이스케이프를 적용합니다. 위험. 그러나 이 이스케이프는 데이터를 JSON으로 해석하는 데 방해가 될 수 있습니다.

Flask는 이 문제를 해결하기 위해 tojson 필터를 제공합니다. Python 객체를 JSON으로 변환하고 렌더링하기에 안전한 것으로 표시합니다.

return render_template('tree.html', tree=tree)
로그인 후 복사
로그인 후 복사

템플릿에서:

var tree = {{ tree|tojson }};
로그인 후 복사

비 JSON 렌더링

데이터가 다음과 같은 경우 JavaScript에서 사용하도록 의도되지 않았으므로 tojson 필터는 필요하지 않습니다. Python 데이터를 직접 전달하고 필요에 따라 템플릿에서 활용하는 것이 좋습니다.

return render_template('tree.html', tree=tree)
로그인 후 복사
로그인 후 복사

템플릿에서:

{% for item in tree %}
    <li>{{ item }}</li>
{% endfor %}
로그인 후 복사

이스케이프 비활성화

이스케이프가 필요하지 않은 경우 이미 문자열 형식의 JSON 데이터가 있는 경우 안전 필터를 사용하여 이스케이프를 비활성화하거나 마크업.

안전한 필터 사용:

return render_template('tree.html', tree=Markup(json.dumps(tree)))
로그인 후 복사

템플릿에서:

var tree = {{ tree }};
로그인 후 복사

마크업 사용:

return render_template('tree.html', tree=json.dumps(tree))
로그인 후 복사

에서는 템플릿:

var tree = {{ tree|safe }};
로그인 후 복사

위 내용은 Jinja 템플릿에서 JSON 데이터를 렌더링할 때 JSON.parse가 'SyntaxError: 예기치 않은 토큰 '&''과 함께 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿