16

如何将变量插入到我使用 python 发送的 html 电子邮件中?我要发送的变量是code. 以下是我到目前为止所拥有的。

text = "We Says Thanks!"
html = """\
<html>
  <head></head>
  <body>
    <p>Thank you for being a loyal customer.<br>
       Here is your unique code to unlock exclusive content:<br>
       <br><br><h1><% print code %></h1><br>
       <img src="http://domain.com/footer.jpg">
    </p>
  </body>
</html>
"""
4

3 回答 3

41

使用"formatstring".format

code = "We Says Thanks!"
html = """\
<html>
  <head></head>
  <body>
    <p>Thank you for being a loyal customer.<br>
       Here is your unique code to unlock exclusive content:<br>
       <br><br><h1>{code}</h1><br>
       <img src="http://domain.com/footer.jpg">
    </p>
  </body>
</html>
""".format(code=code)

如果您发现自己替换了大量变量,则可以使用

.format(**locals())
于 2012-11-03T10:23:38.647 回答
16

另一种方法是使用模板

>>> from string import Template
>>> html = '''\
<html>
  <head></head>
  <body>
    <p>Thank you for being a loyal customer.<br>
       Here is your unique code to unlock exclusive content:<br>
       <br><br><h1>$code</h1><br>
       <img src="http://domain.com/footer.jpg">
    </p>
  </body>
</html>
'''
>>> s = Template(html).safe_substitute(code="We Says Thanks!")
>>> print(s)
<html>
  <head></head>
  <body>
    <p>Thank you for being a loyal customer.<br>
       Here is your unique code to unlock exclusive content:<br>
       <br><br><h1>We Says Thanks!</h1><br>
       <img src="http://domain.com/footer.jpg">
    </p>
  </body>
</html>

请注意,我使用了safe_substitute, not substitute,好像有一个不在提供的字典中的占位符,substitute将引发ValueError: Invalid placeholder in string. 同样的问题是string formatting

于 2012-11-03T10:28:58.270 回答
2

使用 pythons 字符串操作: http ://docs.python.org/2/library/stdtypes.html#string-formatting

通常 % 运算符用于将变量放入字符串中,%i 表示整数,%s 表示字符串,%f 表示浮点数,注意:还有另一种格式类型(.format),在上面的链接中也有描述,这允许您传入一个比我在下面显示的更优雅的字典或列表,从长远来看,这可能是您应该做的,因为如果您想将 100 个变量放入字符串中,% 运算符会变得混乱,虽然使用 dicts(我的最后一个例子)有点否定这一点。

code_str = "super duper heading"
html = "<h1>%s</h1>" % code_str
# <h1>super duper heading</h1>
code_nr = 42
html = "<h1>%i</h1>" % code_nr
# <h1>42</h1>

html = "<h1>%s %i</h1>" % (code_str, code_nr)
# <h1>super duper heading 42</h1>

html = "%(my_str)s %(my_nr)d" %  {"my_str": code_str, "my_nr": code_nr}
# <h1>super duper heading 42</h1>

这是非常基本的,仅适用于原始类型,如果您希望能够存储字典、列表和可能的对象,我建议您使用将它们转换为 jsons http://docs.python.org/2/library/json.htmlhttps://stackoverflow.com/questions/4759634/python-json-tutorial是很好的灵感来源

希望这可以帮助

于 2012-11-03T10:46:33.000 回答