Sé que es una pregunta muy simple, pero no tengo idea de cómo buscarla en Google.
Como lo puedo hacer
print '<a href="%s">%s</a>' % (my_url)
Entonces, ¿eso my_url
se usa dos veces? Supongo que tengo que "nombrar" el %s
y luego usar un dict en los parámetros, pero no estoy seguro de la sintaxis adecuada.
solo para tu información, sé que puedo usar my_url
dos veces en los parámetros, pero ese no es el punto :)
Respuestas:
En Python 2.6+ y Python 3, puede optar por utilizar el método de formato de cadena más nuevo.
que te salva de repetir el argumento, o
si quieres parámetros con nombre.
que es estrictamente posicional, y solo viene con la advertencia de que los argumentos de formato () siguen las reglas de Python donde los argumentos sin nombre deben venir primero, seguidos de los argumentos con nombre, seguidos de * args (una secuencia como lista o tupla) y luego * kwargs (un dict tecleado con cuerdas si sabes lo que es bueno para ti). Los puntos de interpolación se determinan primero sustituyendo los valores nombrados en sus etiquetas, y luego posicionales de lo que queda. Entonces, también puedes hacer esto ...
Pero no esto ...
fuente
"literal {arg1}".format(arg1="arg!")
formato con nombre funciona con Python 3.5, mientras que el terserf"literal {arg1}"
es una innovación más reciente en Python 3.6 o más reciente, AFAIK.fuente
'<a href="%(url)s">%(url)s</a>' % dict(url=my_url)
Solución en Python 3.6+
Python 3.6 introduce el formato de cadena literal , para que pueda formatear los parámetros con nombre sin repetir ninguno de sus parámetros con nombre fuera de la cadena:
Esto evaluará
my_url
, por lo que si no está definido obtendrá unNameError
. De hecho, en lugar demy_url
, puede escribir una expresión arbitraria de Python, siempre que se evalúe como una cadena (debido al:s
código de formato). Si desea una representación de cadena para el resultado de una expresión que podría no ser una cadena, reemplácela:s
por!s
, al igual que con el formato de cadena regular y pre-literal.Para obtener detalles sobre el formato de cadena literal, consulte PEP 498 , donde se introdujo por primera vez.
fuente
Serás adicto a la sintaxis.
También C # 6.0, los desarrolladores de EcmaScript también tienen esta sintaxis más familiar.
fuente
Para crear páginas HTML, desea utilizar un motor de plantillas, no una simple interpolación de cadenas.
fuente
render()
método? Nada dice que tiene que alimentar la salida de la plantillaHttpResponse()
. Django es vergonzosamente versátil.Además de la forma del diccionario, puede ser útil conocer el siguiente formato:
print '<a href="%s">%s</a>' % (my_url, my_url)
Aquí es un poco redundante, y la forma del diccionario es ciertamente menos propensa a errores al modificar el código, pero aún es posible usar tuplas para múltiples inserciones. El primero
%s
se sustituye por el primer elemento en la tupla, el segundo%s
se sustituye por el segundo elemento en la tupla, y así sucesivamente por cada elemento en la tupla.fuente
my_url
realidad es una llamada de función que no quiero que me evalúen dos veces. Dos veces no es tan malo, pero podría haber sido fácilmente 20 veces :)(get_my_url(), )*20
solo llama a la función una vez y la duplica 20 veces.