@app.route("/index")
def index():
data = "<p>안녕하세요.</p><p>반갑습니다.</p>"
return render_template('index.html', data=data)
위와 같이 서버에서 html 요소를 전달한 것을 jinja2를 통해 html 문서에서 표현해야 하는 상황인 경우에는 다음과 같이 safe라는 필터를 걸어줘야 한다.
{{data|safe}}
안녕하세요.
반갑습니다.
safe 필터를 걸어주면 autoescape가 비활성된다. 그렇지 않고 {{data}}로 사용하면 p 태그를 인식하지 못하고 그냥 문자열로 받아들인다.
{{data}}
<p>안녕하세요.</p><p>반갑습니다.</p>
주의할 것은 safe 필터는 개발자가 신뢰할 수 있는 데이터가 표출되는 곳에 대해서만 사용해야 한다는 점이다. 그렇지 않으면 XSS(cross-site scripting) 공격을 받을 수도 있다. 참고로 XSS란 웹 사이트의 입력 폼에 악성 스크립트를 삽입하여 공격하는 기법이다.
참고자료
[1] https://stackoverflow.com/questions/3206344/passing-html-to-template-using-flask-jinja2
'Dev > python' 카테고리의 다른 글
[python] 파이썬스럽게 코딩하는 법, PEP8 정리 (4) | 2022.03.15 |
---|---|
[pyside6] QLabel에 이미지 넣을 때 종횡비(aspect ratio) 설정 (2) | 2022.02.27 |
[pyside6] 위젯 내 글자 크기를 변경하고 싶을 때 (0) | 2022.02.26 |
[pyside6] QThreadPool을 이용해서 몇 개의 스레드가 활성화되어 있는지 확인하기 (1) | 2022.02.25 |
[flask+jinja2] break 사용하기 (2) | 2022.02.05 |
[python] SyntaxError: Non-ASCII character '\xec' 에러 해결법 (0) | 2022.01.14 |
[PySide6] DeprecationWarning: Fuction: 'globalPos() const' is marked as deprecated 경고 메시지 출력 안되게 하기 (0) | 2021.11.29 |
[python] 파이썬 에러 종류 정리(SyntaxError, TypeError, IndexError 등) (2) | 2021.06.30 |