2014-04-04 22 views
40

Tôi đang sử dụng microframework Flask cho máy chủ của tôi sử dụng mẫu Jinja. Tôi có parent template.html và một số child child1.html, child2.html. Một số những đứa trẻ này là các tệp html khá lớn và tôi muốn chia chúng ra để có được sự sáng suốt tốt hơn trong công việc của tôi.Bao gồm tệp html trong mẫu Jinja2

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

Các template.html đơn giản:

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

Và sự kỳ diệu là trong child1.html:

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

Thay vì những ý kiến ​​

<!-- include content1.html --> 

Tôi có rất nhiều văn bản html. Và rất khó để theo dõi những thay đổi và không mắc phải một số sai lầm, mà sau đó rất khó tìm và chính xác. Vì vậy, tôi chỉ muốn tải content1.html thay vì viết tất cả trong child1.html. Tôi đã xem qua câu hỏi này Include another HTML file in a HTML file, 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 điều đó.

Lưu ý. Đoạn mã trên có thể không hoạt động đúng cách, tôi vừa viết nó để ilustrate vấn đề.

Trả lời

94

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

{% 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.

+2

Cảm ơn rất nhiều. Tôi sẽ đánh dấu câu hỏi này như là một trong những tôi chấp nhận gây ra nó cho thấy ví dụ làm thế nào để sử dụng nó (mặc dù nó là khá đơn giản trong trường hợp này.) – quapka

Các vấn đề liên quan