2011-03-22 12 views
7

Cómo escribir una render_user función que toma una de las tuplas devueltas por lista de usuarios y una plantilla de cadena y devuelve los datos sustituidos en la plantilla, por ejemplo:plantilla en pitón

>>> tpl = "<a href='mailto:%s'>%s</a>" 
>>> render_user(('[email protected]', 'matt rez',), tpl) 
"<a href='mailto:[email protected]>Matt rez</a>" 

Cualquier ayuda se agradece

Respuesta

10

no hay necesidad urgente de crear una función, si no necesita uno:

>>> tpl = "<a href='mailto:%s'>%s</a>" 
>>> s = tpl % ('[email protected]', 'matt rez',) 

>>> print s 
"<a href='mailto:[email protected]'>matt rez</a>" 

Si estás en 2.6+ puede utilizar alternativamente la nueva format func el ion junto con su mini-idioma:

>>> tpl = "<a href='mailto:{0}'>{1}</a>" 
>>> s = tpl.format('[email protected]', 'matt rez') 

>>> print s 
"<a href='mailto:[email protected]'>matt rez</a>" 

envuelta en una función:

def render_user(userinfo, template="<a href='mailto:{0}'>{1}</a>"): 
    """ Renders a HTML link for a given ``userinfo`` tuple; 
     tuple contains (email, name) """ 
    return template.format(userinfo) 

# Usage: 

userinfo = ('[email protected]', 'matt rez') 

print render_user(userinfo) 
# same output as above 

Crédito adicional:

En lugar de utilizar un tuple objeto normal, trate de usar el más robusto y humano amigable namedtuple proporcionan por el módulo collections. Tiene las mismas características de rendimiento (y consumo de memoria) que un tuple normal. Una introducción corta en tuplas nombre se puede encontrar en este PyCon 2011 Vídeo (avance rápido a ~ 12 m): http://blip.tv/file/4883247

+0

Gracias mucho, pero tengo que escribirlo con la función, ¿es similar a los códigos o I anterior debería agregar mas codigos? – Tara

+2

El código anterior debería ser suficiente. – miku

+0

@miku ¿Podría agregar detalles sobre el uso de una tupla nombrada? El archivo blip.tv ha sido eliminado, y PyCon 2011 enumera muchos resultados en youtube ... He comprobado un par de respuestas SO relacionadas y todavía no he encontrado un ejemplo claro (obv no entendió la documentación) - TIA! – ptim

4
 
from string import Template 
t = Template("${my} + ${your} = 10") 
print(t.substitute({"my": 4, "your": 6}))