Переменная Python в электронном письме HTML в Python

Как вставить переменную в электронное письмо в формате html, которое я отправляю с помощью python? Переменная, которую я пытаюсь отправить, это 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>
"""

person David Vasandani    schedule 03.11.2012    source источник
comment
для более сложных случаев вам может понадобиться механизм шаблонов, такой как jinja2   -  person jfs    schedule 03.11.2012


Ответы (3)


Используйте "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())
person Eric    schedule 03.11.2012

Другой способ — использовать Шаблоны:

>>> 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, а не substitute, так как если есть заполнитель, которого нет в предоставленном словаре, substitute поднимет ValueError: Invalid placeholder in string. Та же проблема с string formatting.

person ovgolovin    schedule 03.11.2012
comment
Если у нас есть несколько переменных, которые необходимо заменить в одном html, как мы можем это сделать? - person Ravi; 21.11.2020

используйте манипуляции со строками Python: http://docs.python.org/2/library/stdtypes.html#string-formatting

как правило, оператор % используется для помещения переменной в строку, %i для целых чисел, %s для строк и %f для чисел с плавающей запятой, NB: существует также другой тип форматирования (.format), который также описан в приведенной выше ссылке, который позволяет вам передавать словарь или список, немного более элегантный, чем то, что я показываю ниже, это может быть то, что вам следует использовать в долгосрочной перспективе, поскольку оператор % сбивает с толку, если у вас есть 100 переменных, которые вы хотите поместить в строку, хотя использование диктов (мой последний пример) как бы отрицает это.

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.html и https://stackoverflow.com/questions/4759634/python-json-tutorial являются хорошим источником вдохновения.

Надеюсь это поможет

person jcr    schedule 03.11.2012