在Jinja2模板中包含html文件

时间:2014-04-04 10:22:35

标签: python html flask jinja2

我在使用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中编写所有内容。我遇到了这个问题Include another HTML file in a HTML file,但我在实施它时遇到了问题。我认为Jinja2可能有更好的工具。

注意。 上面的代码可能无法正常工作,我只是写它来说明问题。

3 个答案:

答案 0 :(得分:133)

使用jinja2 {% include %}指令。

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

这将包含来自正确内容文件的内容。

答案 1 :(得分:13)

您可以使用include声明。

答案 2 :(得分:0)

我正在尝试为每个图像嵌入多个带有文本的图像,但是下面的代码仅添加图像:

home = str(Path.home())
path = home + "\\Pictures"
list_of_images = glob( os.path.join(path, "*.png") )

mail = MIMEMultipart("related")
#Jinja2 for html template

main = Template('''
    <html><body> 
    <h2>This is a Test email for python script</h2>
    <br />
    {% for image in pictures %}<p> $(name) </p><br /><img src="cid:{{image}}"><br />{% endfor %}
    </body></html>''')



for filename in list_of_images:
    fp = open(filename, 'rb')
    msg_img = MIMEImage(fp.read())
    fp.close()
    msg_img.add_header('Content-ID', '<{}>'.format(filename))
    msg_img.add_header('Content-Disposition', 'inline', filename=filename)
    mail.attach(msg_img)

mail['Subject'] = "Python Script Test | You will receive this email every 30 minutes"
mail['From'] = me
mail['To'] = you