我在使用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可能有更好的工具。
注意。 上面的代码可能无法正常工作,我只是写它来说明问题。
答案 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