2014-04-04 151 views
40

我在使用Jinja模板的服務器上使用Flask microframework。我有父級template.html和一些childs child1.html,child2.html。其中一些孩子是非常大的HTML文件,我想以某種方式將它們分開以便更好地理解我的工作。在Jinja2模板中包含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中。我遇到了這個問題Include another HTML file in a HTML file,但是我在執行時遇到問題。我認爲Jinja2可能有更好的工具。

注意。 上面的代碼可能工作不正常,我只是寫它來解決問題。

回答

94

使用jinja2 {% include %}指令。

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

這將包括來自正確內容文件的內容。

+2

非常感謝。我會將這個問題標記爲我接受的問題,因爲它顯示瞭如何使用它的示例(儘管在這種情況下它非常簡單)。 – quapka

相關問題