> 웹 프론트엔드 > JS 튜토리얼 > Jinja가 렌더링한 JSON 데이터를 구문 분석할 때 JavaScript의 SyntaxError를 해결하는 방법은 무엇입니까?

Jinja가 렌더링한 JSON 데이터를 구문 분석할 때 JavaScript의 SyntaxError를 해결하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2024-12-09 19:22:11
원래의
684명이 탐색했습니다.

How to Resolve JavaScript's SyntaxError When Parsing Jinja-Rendered JSON Data?

JavaScript가 Jinja 템플릿에서 렌더링된 데이터로 SyntaxError를 발생시킵니다.

Flask 경로에서 Jinja 템플릿으로 데이터를 JSON으로 전달하고 JavaScript를 사용하여 반복하려고 할 때 "SyntaxError: 예기치 않은 토큰 '&'"이 발생할 수 있습니다. 이 오류는 렌더링된 데이터에서 JSON.parse를 호출할 때 발생합니다.

문제

이 문제는 보안 조치로 HTML 템플릿에서 렌더링된 데이터를 자동으로 이스케이프하는 Flask의 Jinja 환경에서 발생합니다. 이 이스케이프된 데이터를 JavaScript에서 JSON으로 사용하려고 하면 구문 오류가 발생합니다.

해결책: tojson 필터 사용

이 문제를 해결하기 위해 Flask는 tojson 필터를 제공합니다. 이 필터는 자동으로 Python 데이터를 JSON으로 덤프하고 JavaScript로 렌더링해도 안전하다고 표시합니다.

예:

return render_template("tree.html", tree=tree)
로그인 후 복사
로그인 후 복사
var tree = {{ tree|tojson }};
로그인 후 복사

대체 솔루션

안전하게 사용하기 필터:

JSON을 렌더링하지 않는 경우 안전 필터를 사용하여 Jinja가 데이터를 탈출하는 것을 방지할 수 있습니다.

예:

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

사용 마크업:

렌더링 전에 데이터를 마크업으로 래핑할 수도 있으며 이는 안전 필터를 사용하는 것과 같습니다.

예:

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

JavaScript 대신 Jinja에 데이터 전달

JavaScript 사용을 위한 데이터가 아닌 경우 하지만 Jinja의 경우 tojson 필터가 필요하지 않습니다. Python 데이터를 직접 전달하고 템플릿의 다른 데이터로 사용합니다.

예:

return render_template("tree.html", tree=tree)
로그인 후 복사
로그인 후 복사
{% for item in tree %}
    <li>{{ item }}</li>
{% endfor %}
로그인 후 복사

위 내용은 Jinja가 렌더링한 JSON 데이터를 구문 분석할 때 JavaScript의 SyntaxError를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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