Estoy usando Mako + Pylons y he notado una horrenda cantidad de espacios en blanco en mi salida de HTML.Espacio en blanco de la tira desde la salida de la plantilla Mako (Pilones)
¿Qué debo hacer para deshacerme de él? Reddit logra hacerlo.
Estoy usando Mako + Pylons y he notado una horrenda cantidad de espacios en blanco en mi salida de HTML.Espacio en blanco de la tira desde la salida de la plantilla Mako (Pilones)
¿Qué debo hacer para deshacerme de él? Reddit logra hacerlo.
No estoy seguro de si hay una manera de hacerlo dentro de Mako, pero siempre puedes hacer algo de procesamiento posterior a la renderización antes de publicar la página. Por ejemplo, supongamos que tiene el siguiente código que genera el espacio en blanco horrendo:
from mako import TemplateLookup
template_lookup = TemplateLookup(directories=['.'])
template = template_lookup.get_template("index.mako")
whitespace_mess = template.render(somevar="no whitespace here")
return whitespace_mess # Why stop here?
Se podría añadir un paso adicional en este modo:
from mako import TemplateLookup
template_lookup = TemplateLookup(directories=['.'])
template = template_lookup.get_template("index.mako")
whitespace_mess = template.render(somevar="no whitespace here")
cleaned_up_output = cleanup_whitespace(whitespace_mess)
return cleaned_up_output
... donde cleanup_whitespace() es una función que hace lo que quiere (podría pasarlo por HTML Tidy o slimmer o lo que sea). No es la forma más eficiente de hacerlo, pero lo convierte en un ejemplo rápido :)
Si sus datos no son demasiado dinámicos, podría almacenar un caché optimizado de la salida de la plantilla y publicarlo en los clientes web.
Hay una barra invertida.
Consulte la página de inicio de mako http://makotemplates.org para ver un ejemplo.
<%def name="makerow(row)">
<tr>
% for name in row:
<td>${name}</td>\
% endfor
</tr>
</%def>
Pero en serio, no me tomaría demasiado tiempo tratar de formatear correctamente la salida. Lo que es importante es tener un código de plantilla legible. Uso el inspector web de Webkit (o FireBug, si lo prefieres) con más frecuencia que "ver fuente".
Si realmente quieres un buen formato de salida html, siempre puedes escribir un middleware que lo haga.
http://docs.makotemplates.org/en/latest/syntax.html?highlight=empty#newline-filters –
La única manera de hacer esto sin postprocesamiento sería evitar espacios en blanco en la plantilla. Sin embargo, eso hará las cosas muy difíciles para usted como desarrollador.
Debe decidir si la hora de limpiar la cadena HTML después de que se haya procesado la plantilla ahorrará suficiente ancho de banda para compensar este costo. Recomiendo usar una biblioteca de código C optimizada para hacer esto por usted, como lxml.html
.
>>> from lxml import html
>>> page = html.fromstring("""<html>
...
... <body>yuck, a newline! bandwidth wasted!</body>
... </html>""")
>>> html.tostring(page)
'<html><body>yuck, a newline! bandwidth wasted!</body></html>'
Al igual que la respuesta de Dan, pasé la salida renderizada a través de esta función que solo conserva espacios en blanco "deliberados". Definí que para ser dos retornos carrage en una fila (i.e una línea vacía)
Así
Hello
There
Se convierte en
Hello There
Pero
Hello
There
convierte
Hello
There
Aquí está el código
def filter_newline(input):
rendered_output = []
for line in input.split("\n"):
if line:
# Single new-lines are removed
rendered_output.append(line)
else:
# Subsequent newlines (so no body to the interveaning line) are retained
rendered_output.append("\n")
return "".join(rendered_output)
Ejecutar como tal (me robaron parte del ejemplo de Dan)
whitespace_mess = template.render(somevar="Hello \nThere")
cleaned_up_output = filter_newline(whitespace_mess)
No entiendo cómo se relaciona con mi problema de espacio en blanco. ¿Podrías elaborar? –
Bueno, haz que Mako genere las plantillas como lo hace ahora. Y, en lugar de agregar la complejidad de postprocesar cada solicitud (muy probablemente a través de expresiones regulares), se sirve una versión en caché de la página una vez que se ha procesado. –