Frage

Ich bin mit Pylonen mit Mako-Vorlagen und ich mag die Eingabe das die ganze Zeit zu vermeiden:

${ h.some_function_that_outputs_html() | n }

Ich möchte irgendwie die Funktion zu markieren, oder eine Variable als sicher (Sie tun können, dass in Django), so habe ich nicht zu Rohr-en die ganze Zeit. Irgendwelche Ideen?

War es hilfreich?

Lösung

ich gerade herausgefunden, dass, wenn Sie setzen ein html Methode in der Klasse, dann wird Mako rufen Sie diese Methode und Ausgang, was es in der Vorlage zurück.

So habe ich:

def __html__(self):
    return unicode(self)

Das ist im Grunde, was h.literal der Fall ist.

Andere Tipps

Nach dem mako docs über Filterung , können Sie die Standardfilter-Set, das innerhalb Vorlagen angewandt, wenn auch für den Template eine neue TemplateLookup zu schaffen (in diesem Fall das für alle Vorlagen, die von Standard gelten würde, die es nach oben sieht), mit dem default_filters Argumente.

Pylonen verwendet dieses Argument mit TemplateLookup die Standardeinstellung für Ihr Projekt innerhalb der config/environment.py-Datei festlegen:

# Create the Mako TemplateLookup, with the default auto-escaping
config['pylons.app_globals'].mako_lookup = TemplateLookup(
    directories=paths['templates'],
    error_handler=handle_mako_error,
    module_directory=os.path.join(app_conf['cache_dir'], 'templates'),
    input_encoding='utf-8', default_filters=['escape'],
    imports=['from webhelpers.html import escape'])

Dies ist, warum Sie das entweichende standardmäßig bekommen (was nicht der Fall ist, wenn Sie Mako selbst verwenden). So könnte man es entweder global ändern, in der Konfigurationsdatei, oder nicht auf dem Standard-Lookup verlassen. Beachten Sie, dass Sie sollten natürlich dann explizit einen Filter verwenden, um diese Dinge zu entkommen, die Flucht brauchen.

Sie können auch einen String übergeben „markiert als sicher“ mit der Pylonen Helfer h.literal, zum Beispiel, wenn Sie h.literal('This will <b>not</b> be escaped') auf die Vorlage passieren würden, sagen als Variable mit dem Namen spam, die Sie gerade ${spam} ohne Flucht nutzen könnten.

Wenn Sie den gleichen Effekt wünschen, wenn Sie aus dem Inneren einer Vorlage, um eine bestimmte Funktion aufrufen, würde diese Funktion zurückgeben müssen eine solche wörtliche oder bieten einen Helfer für diese Funktion, die h.literal auf das Ergebnis ruft, wenn Sie das Original verlassen wollen Funktion allein. (Oder ich denke, man es auch über einen „Filtern von def“ nennen könnte (siehe gleichen Mako doc wie oben), nicht mit, dass noch experimentiert)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top