2012-05-17 11 views
5

To pytanie zostało zadane before, ale przyjęte rozwiązanie (podane przez sam plakat z zapytaniem) mówi, że możemy dodać nowy filtr do jinja2.filter.FILTER.Dodawanie niestandardowego filtra do jinja2 pod piramidą

Jednak w przypadku jinja2 documentation zaleca się dodanie filtra do środowiska.

Pracuję nad aplikacją pod piramidą i muszę zdefiniować mój filtr niestandardowy i wykonać następujące czynności.

from jinja2 import Environment 

#Define a new filter 
def GetBitValue(num,place): 
    y = (num >> (place-1)) & 1 
    return y 

env = Environment() 
env.filters['getbitvalue'] = GetBitValue 

Gdzie należy umieścić ten fragment kodu?

Próbowałem umieścić go w pliku widoków, ale to oczywiście nie zadziałało.

Jeśli umieści się go w __init__.py, w jaki sposób mogę się upewnić, że jinja2 podnosi go? Mam na myśli, w jaki sposób odesłać ustawienia env do jinja2 w piramidzie?

+0

Nie powinieneś tworzyć nowego środowiska, ale korzystać z tej piramidy. – ThiefMaster

+0

Jak to zrobić? – RedBaron

+0

Z tego, co czytałem w piramidzie docs jinja nie jest obsługiwany natywnie, więc proszę napisać kod, w jaki sposób rejestrujesz jinja jako renderer w piramidzie. – ThiefMaster

Odpowiedz

11

Zakładając, że używasz pyramid_jinja2, możesz użyć pyramid_jinja2.get_jinja2_environment() poprzez instancję configurator, aby uzyskać dostęp do środowiska.

Jednak najwyraźniej można również register them via the pyramid config file bez dostępu do env bezpośrednio:

[app:yourapp] 
    # ... other stuff ... 
    jinja2.filters = 
     # ... 
     getbitvalue = your_package.your_subpackage:GetBitValue 
+2

A co jeśli nie chcę określać w config? To naprawdę nie jest konfiguracja, prawda? Powinien być podłączony do kodu. Konfiguracja jest przeznaczona dla ruchomych bitów, które będą różne dla etapów dev/prod. –

+0

Niektóre dodatki: config.include ('pyramid_jinja2') config.commit() # możesz to tutaj jinjaEnv = config.get_jinja2_environment() – tariqdaouda

5

Dla kompletności byłoby to, w jaki sposób zarejestrować filtr w kodzie.

# __init__.py 
def main(global_config, **settings): 
    #.... 
    config = Configurator(settings=settings) 
    config.include('pyramid_jinja2') 
    config.commit() # this is needed or you will get None back on the next line 
    jinja2_env = config.get_jinja2_environment() 
    jinja2_env.filters['getbitvalue'] = GetBitValue 
+0

Ten jest świetny! – juliusmh

Powiązane problemy