2017-12-23 7 views
1

Ich möchte eine Python-Funktion aus einer Jinja-Vorlage aufrufen. Am doucmentation (http://jinja.pocoo.org/docs/2.10/templates/ Zuordnungen sehen) wird das folgende Beispiel angeboten:Jinja2 - Verwenden Sie Set (Zuweisungen), um customer_function zu rufen

{% set key, value = call_something() %} 

Aber die folgende Quelle funktioniert nicht.

import jinja2 

@jinja2.contextfunction 
def hw(): 
    return "World" 

template = jinja2.Template('{% set test = hw() %} Hello {{ test }}!') 
template.render(name='John Doe') 

Error: ... UndefinedError: 'hw' is undefined 

Kann jemand das Problem lösen ?! Vielen Dank an alle!

Antwort

1

Sie können es einfach als key=value Paar in der template.render-Funktion liefern, so wie Sie die Variable name geliefert haben.

import jinja2 

def hw(): 
    return "World" 

template = jinja2.Template('{% set test = hw() %} Hello {{ test }}!') 
print(template.render(name='John Doe', hw=hw)) 

Alternativ, ob und wann Sie einen Jinja environment verwenden möchten, können Sie es zu dem globals dictionary hinzufügen können, bevor irgendwelche Vorlagen erstellt werden, sollten Sie die Funktion von jeder Vorlage zugänglich zu sein, in dem Umgebung.

import jinja2 

def hw(): 
    return "World" 

template = """ 
{% set test = hw() %} Hello {{ test }}! 

""" 

env = jinja2.Environment() 
env.globals['hw'] = hw 
template = env.from_string(template) 
print(template.render(name='John Doe')) 

habe ich die from_string Methode hier verwendet, um Ihre Vorlage zu laden, aber es gibt eine ganze loaders system für Umgebungen, die Sie untersuchen möchten.

Verwandte Themen