Làm cách nào để đưa tệp HTML vào mẫu Jinja2?


82

Tôi đang sử dụng khuôn khổ vi mô Flask cho máy chủ của mình sử dụng các mẫu Jinja.

Tôi có một mẹ template.htmlvà một số trẻ em mẫu gọi child1.htmlchild2.html, một số trong những trẻ em mẫu là khá file HTML lớn và tôi muốn bằng cách nào đó chia chúng cho sáng suốt tốt hơn công việc của tôi.

Nội dung main.pykịch bản của tôi :

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()

Đơn giản hóa template.html:

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

Điều kỳ diệu là ở child1.html:

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

Thay vì các bình luận:

<!-- include content1.html -->

Tôi có rất nhiều văn bản html, và rất khó để theo dõi các thay đổi và không mắc một số lỗi, sau đó khá khó để tìm và sửa.

Tôi chỉ muốn tải content1.htmlthay vì viết tất cả vào child1.html.

Tôi đã xem qua câu hỏi này , nhưng tôi gặp sự cố khi triển khai nó.

Tôi nghĩ Jinja2 có thể có một công cụ tốt hơn cho việc đó.

LƯU Ý: Đoạn mã trên có thể không hoạt động bình thường, tôi chỉ viết nó để minh họa sự cố.

Câu trả lời:


179

Sử dụng {% include %}chỉ thị jinja2 .

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

Điều này sẽ bao gồm nội dung từ tệp nội dung chính xác.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.