Ich benutze Mako + Pylons und ich habe eine schreckliche Menge an Leerzeichen in meiner HTML-Ausgabe festgestellt.Streifen Whitespace von Mako Vorlagenausgabe (Pylons)
Wie würde ich es loswerden? Reddit schafft es.
Ich benutze Mako + Pylons und ich habe eine schreckliche Menge an Leerzeichen in meiner HTML-Ausgabe festgestellt.Streifen Whitespace von Mako Vorlagenausgabe (Pylons)
Wie würde ich es loswerden? Reddit schafft es.
Ich bin mir nicht sicher, ob es eine Möglichkeit gibt, es innerhalb von Mako selbst zu machen, aber Sie können immer nur eine Post-Rendering-Verarbeitung durchführen, bevor Sie die Seite bereitstellen. Zum Beispiel, sagen Sie den folgenden Code haben, die Ihre horrenden Leerzeichen erzeugt:
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?
Sie in einem zusätzlichen Schritt hinzufügen könnte etwa so:
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
... wo cleanup_whitespace() eine Funktion ist, dass macht was Sie wollen (es könnte es durch HTML Tidy oder slimmer oder was auch immer passieren). Es ist nicht der effizienteste Weg, es zu tun, aber es macht ein schnelles Beispiel :)
Wenn Ihre Daten nicht zu dynamisch sind, können Sie einen optimierten Cache der Vorlagenausgabe speichern und dies für Web-Clients bereitstellen.
Da ist die Backslash-Sache.
Schauen Sie sich die Homepage von Mako http://makotemplates.org für ein Beispiel an.
Aber im Ernst, ich würde nicht zu viel Zeit verbringen versuchen, die Ausgabe richtig zu formatieren. Wichtig ist, lesbaren Vorlagencode zu haben. Ich benutze den Web Inspector von Webkit (oder FireBug, wenn Sie bevorzugen) häufiger als "Quelle anzeigen".
Wenn Sie wirklich gut formatierte HTML-Ausgabe möchten, könnten Sie immer eine Middleware schreiben, die das tut.
http://docs.makotemplates.org/en/latest/syntax.html?highlight=empty#newline-filters –
Die einzige Möglichkeit, dies ohne Nachbearbeitung zu tun, wäre Whitespace in der Vorlage zu vermeiden. Allerdings wird das für Sie als Entwickler sehr schwierig.
Sie müssen entscheiden, ob die Zeit zum Bereinigen der HTML-Zeichenfolge nach dem Rendern der Vorlage ausreicht, um diese Kosten zu kompensieren. Ich empfehle die Verwendung optimierter C-Code-Bibliothek, um dies für Sie zu tun, wie 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>'
ähnlich wie Dan Antwort, habe ich die gerenderte Ausgabe durch diese Funktion, die nur „absichtlich“ Leerzeichen bewahrt. Ich definierte das als zwei Carrage Returns hintereinander (i.e eine leere Zeile)
So
Hello
There
Wird
Hello There
Aber
Hello
There
Wird
Hello
There
Hier ist der Code
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)
wie so ausführen (I Teil von Dans Beispiel stahl)
whitespace_mess = template.render(somevar="Hello \nThere")
cleaned_up_output = filter_newline(whitespace_mess)
Ich verstehe nicht, wie das zu meinem Leerzeichen Problem bezieht. Könnten Sie das näher ausführen? –
Nun, lassen Sie Mako die Vorlagen wie jetzt erzeugen. Und anstatt die Komplexität der Nachbearbeitung jeder Anfrage (am wahrscheinlichsten über reguläre Ausdrücke) hinzuzufügen, sollte eine zwischengespeicherte Version der Seite bereitgestellt werden, sobald diese verarbeitet wurde. –