2013-02-09 10 views
6

Jestem trochę nowy w Jinja2 i zastanawiam się, czy istnieje sposób, aby szablony, podczas generowania, drukować na konsoli lub przekierowywać niektóre wyniki do jakiegoś strumienia?jinja2 drukowanie na konsolę lub rejestrowanie

Ponieważ szablony Jinja2 mogą mieć logikę wewnątrz, myślę, że czasem warto byłoby zalogować niektóre informacje do jakiegoś pliku logu lub przynajmniej uzyskać wydruk na konsoli.

Czy to możliwe, czy po prostu mówię śmieci?

Odpowiedz

7

Myślę, że można to osiągnąć za pomocą filtrów (http://jinja.pocoo.org/docs/api/#custom-filters) lub rozszerzeń (http://jinja.pocoo.org/docs/extensions/#adding-extensions). Chodzi o to, aby po prostu wydrukować filtr lub rozszerzenie prosto do konsoli.

nie testowano, ale filtr powinien być coś takiego:

def debug(text): 
    print text 
    return '' 

environment.filters['debug']=debug 

Aby być używany jako:

...<p>Hello world!</p> {{"debug text!"|debug}}... 

Pamiętaj, aby usunąć debugowania kodu produkcji!

+0

oh cool! Wiedziałem, że powinien być jakiś sposób, aby to osiągnąć. Teraz mam z tym problem. Nie mogę wysyłać literalnych ciągów do filtra niestandardowego, mogę to osiągnąć za pomocą tekstu debugowania {% set text = "!" %}, a następnie {{tekst | debug}}. Nie wiem, czy literalne napisy mogą być wysyłane do filtrów, czy nie ...: -o –

+0

dobrze, częściowo rozwiązane (lub może tak powinno być) za pomocą "()", aby zamknąć cały łańcuch, który muszę wydrukować. Na przykład {{("tekst debugowania!") | debug}}. Lub bardziej precyzyjnie: {{("debugowanie tekstu! Wartość:" ~ wartośćINeedToLog) | debugowanie}} –

2

podobny, ale nieco inne podejście przy użyciu procesora kontekstu:

w Pythonie/kolby:

@app.context_processor 
def utility_functions(): 
    def print_in_console(message): 
     print str(message) 

    return dict(mdebug=print_in_console) 

W jinja2, używać go w dowolnym miejscu, co następuje:

{{ mdebug("any text or variable") }} 
Powiązane problemy