我要发送验证电子邮件。该电子邮件包含HTML。我将HTML保存到名为email_templates/verify.html
(路径)的文件中。问题在于,HTML文件中的某些常量直到运行时才是未知的。例如,在电子邮件中,我指的是向其发送电子邮件的用户名,但是由于每封电子邮件都指的是其他人,因此我无法在模板中包括该名称。我想到的一种解决方案是在
<div>
hello {usrname}!
<div>
,然后在python代码中执行以下操作:
lines = open('email_templates/verify.html', 'r').read()
lines.format('joe')
但是,尽管该代码实际上可以工作,但存在一些问题:
{}
都可能是错误的格式有没有更好的方法来解决这个问题?
答案 0 :(得分:2)
这可以而且应该通过模板来完成。 正如您提到的那样,也许python占位符会令人困惑,但我告诉您它们并不令人困惑,模板引擎确保HTML看起来像HTML,而这些模板标签看起来像模板标签。模板引擎确定了可以使用和不能使用的占位符的规则。而且它们比您建议的文件打开方法快得多。因为它们被优化为这样做。
让我们以身作则:
那里有几个模板引擎。 Jinja2是最好的之一。
首先,安装Jinja2。
pip install jinja2
第二,创建一个python文件(命名为任意名称)和一个名为“ templates”的文件夹。在“模板”文件夹下,创建您的verify.html
您的文件夹结构应如下所示:
folder1
|
|--> pythonfile.py
|--> templates
|
|--> verify.html
第三,在HTML文件中放入一些示例代码。我将这个示例放在我的verify.html中:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Index</title>
</head>
<body>
<h1>Dear {{ user }}!</h1>
<h4>
Hope you are fine.
</h4>
<p>
Thank you for signing up. Here is your {{ coupon_code }}
</p>
</body>
</html>
现在在此html文件中,您看到我具有普通的html标签。但是有两组花括号出现两次。大括号内写在花括号内的单词将被视为变量。此变量的值将由我们的python文件提供给此html文件。 另外,为保持一致,jinja不允许您仅使用任何花括号。我的意思是,如果我用“ <>”代替“ {{}}”,那是行不通的。因此,需要遵循一些规则。 在此处阅读更多信息:Jinja allowed tags and filters
第四,将此代码复制到我们创建的python文件中。
#Imports
from jinja2 import Environment, FileSystemLoader, Template
#name of the folder where index file is located.
file_loader = FileSystemLoader('templates')
#This object is needed to create a template object.
env = Environment(loader=file_loader)
#path of the HTML file reletive to the folder.
template = env.get_template('./index.html')
#Data dictionary to be supplied to our HTML file.
input_dict = {
'user': 'Harry',
'coupon_code': '12313ASDSA4'}
#This function renders the data substituted HTML form.
output = template.render(input_dict)
print(output)
现在运行此python文件。