Variable de Python en un correo electrónico HTML en Python

¿Cómo inserto una variable en un correo electrónico html que estoy enviando con python? La variable que estoy tratando de enviar es el code . A continuación es lo que tengo hasta ahora.

 text = "We Says Thanks!" html = """\    

Thank you for being a loyal customer.
Here is your unique code to unlock exclusive content:



"""

Utilice "formatstring".format :

 code = "We Says Thanks!" html = """\    

Thank you for being a loyal customer.
Here is your unique code to unlock exclusive content:


{code}


""".format(code=code)

Si se encuentra sustituyendo un gran número de variables, puede utilizar

 .format(**locals()) 

Otra forma es usar plantillas :

 >>> from string import Template >>> html = '''\    

Thank you for being a loyal customer.
Here is your unique code to unlock exclusive content:


$code


''' >>> s = Template(html).safe_substitute(code="We Says Thanks!") >>> print(s)

Thank you for being a loyal customer.
Here is your unique code to unlock exclusive content:


We Says Thanks!


Tenga en cuenta que usé safe_substitute , no substitute , ya que si hay un marcador de posición que no está en el diccionario proporcionado, el substitute boostá ValueError: Invalid placeholder in string . El mismo problema es con el string formatting .

use la manipulación de cadenas de pythons: http://docs.python.org/2/library/stdtypes.html#string-formatting

generalmente el operador% se usa para poner una variable en una cadena,% i para enteros,% s para cadenas y% f para flotantes, NB: también hay otro tipo de formato (.format) que también se describe en el enlace anterior, que le permite pasar un dictado o una lista un poco más elegante de lo que muestro a continuación, esto puede ser lo que debería buscar a largo plazo, ya que el operador% se confunde si tiene 100 variables que desea colocar en una cadena, aunque el uso de dicts (mi último ejemplo) niega esto.

 code_str = "super duper heading" html = "

%s

" % code_str #

super duper heading

code_nr = 42 html = "

%i

" % code_nr #

42

html = "

%s %i

" % (code_str, code_nr) #

super duper heading 42

html = "%(my_str)s %(my_nr)d" % {"my_str": code_str, "my_nr": code_nr} #

super duper heading 42

esto es muy básico y solo funciona con tipos primitivos; si desea poder almacenar los dicts, las listas y los posibles objetos, le sugiero que los utilice para convertirlos en jsons http://docs.python.org/2/library/json.html y https://stackoverflow.com/questions/4759634/python-json-tutorial son buenas fonts de inspiración

Espero que esto ayude