>웹 프론트엔드 >JS 튜토리얼 >Jinja 템플릿에서 JSON 데이터를 렌더링할 때 내 JavaScript에 SyntaxError가 발생하는 이유는 무엇입니까?

Jinja 템플릿에서 JSON 데이터를 렌더링할 때 내 JavaScript에 SyntaxError가 발생하는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-11 21:37:10349검색

Why Does My JavaScript Get a SyntaxError When Rendering JSON Data from a Jinja Template?

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

소개

Flask 경로에서 Jinja 템플릿으로 JSON 데이터를 전달할 때 브라우저에서 다음과 같은 오류가 발생할 수 있습니다. SyntaxError: Unexpected token '&'를 발생시킵니다. 데이터를 렌더링할 때 속성 이름이 필요합니다. 성공적인 템플릿 처리를 위해서는 JavaScript에서 렌더링된 JSON 데이터를 처리하는 방법을 이해하는 것이 중요합니다.

이스케이프 및 JSON 렌더링

Flask의 Jinja 환경은 보안 취약점을 방지하기 위해 HTML 템플릿에서 렌더링된 데이터를 자동으로 이스케이프합니다. JSON으로 처리해야 하는 데이터의 경우 Flask는 데이터를 JSON으로 덤프하고 안전한 것으로 표시하는 tojson 필터를 제공합니다. tojson 필터를 사용하면 데이터가 이스케이프되지 않고 렌더링되어 JavaScript에서 올바르게 구문 분석될 수 있습니다.

tree = get_nodes("Root")
return render_template("folder.html", data=tree|tojson)
var tree = {{ tree|tojson }};

또는 이전 Flask 버전에서는 안전 필터를 사용하여 안전한 데이터:

var tree = {{ tree|tojson|safe }};

안전한 필터 사용

데이터가 이미 JSON에 덤프된 경우 안전 필터를 사용하여 이스케이프 없이 렌더링에 안전한 것으로 표시할 수 있습니다.

return render_template('tree.html', tree=json.dumps(tree))
var tree = {{ tree|safe }};

마크업에서 JSON 문자열을 래핑하는 것도 안전 필터를 사용하는 것과 동일합니다.

return render_template('tree.html', tree=Markup(json.dumps(tree)))
var tree = {{ tree }};

Jinja에서 Python 데이터 사용

데이터가 전달되지 않는 경우 JavaScript이지만 Jinja에서 사용되는 경우 JSON 렌더링을 생략하고 Python 데이터를 직접 사용할 수 있습니다.

return render_template('tree.html', tree=tree)
{% for item in tree %}
<li>{{ item }}<li>
{% endfor %}

위 내용은 Jinja 템플릿에서 JSON 데이터를 렌더링할 때 내 JavaScript에 SyntaxError가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.