Jinja2 템플릿에 HTML 파일을 어떻게 포함하나요?


82

Jinja 템플릿을 사용하는 내 서버에 Flask 마이크로 프레임 워크를 사용하고 있습니다.

나는 부모가 template.html어떤 아이 템플릿을 호출 child1.html하고 child2.html,이 아이들 중 일부는 템플릿은 꽤 큰 HTML 파일이며, 어떻게 든 내 작품을 더 잘 명석 그들을 분할하고 싶습니다.

main.py스크립트의 내용 :

from flask import Flask, request, render_template

app = Flask(__name__)

@app.route('/')
@app.route('/<task>')
def home(task=''):
  return render_template('child1.html', task=task)

app.run()

단순화 template.html:

<!DOCTYPE html>
<html>
  <head></head>
  <body>
    <div class="container">
      {% block content %}{% endblock %}
    </div>
  </body>
</html>

마법은 다음과 child1.html같습니다.

{% extends 'template.html' %}
{% block content %}
  {% if task == 'content1' %}
    <!-- include content1.html -->
  {% endif %}
  {% if task == 'content2' %}
    <!-- include content2.html -->
  {% endif %}
{% endblock %}

댓글 대신 :

<!-- include content1.html -->

나는 많은 html 텍스트를 가지고 있으며 변경 사항을 추적하고 실수하지 않는 것이 매우 어렵습니다.

나는 content1.html그것을 모두 작성 하는 대신에 로드하고 싶습니다 child1.html.

나는 우연히 이 질문에 ,하지만 난 그것을 구현하는 문제가 있었다.

Jinja2에 더 나은 도구가있을 수 있다고 생각합니다.

참고 : 위의 코드는 제대로 작동하지 않을 수 있으며 문제를 설명하기 위해 작성했습니다.

답변:


179

jinja2 {% include %}지시문을 사용하십시오 .

{% extends 'template.html' %}
{% block content %}
    {% if task == 'content1' %}
        {% include 'content1.html' %}
    {% endif %}
    {% if task == 'content2' %}
        {% include 'content2.html' %}
    {% endif %}
{% endblock %}

여기에는 올바른 콘텐츠 파일의 콘텐츠가 포함됩니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.