2012-05-17 4 views
5

Diese Frage wurde gestellt before aber die akzeptierte Lösung (gegeben durch das Frage-Poster selbst) sagt, dass wir den neuen Filter sofort zu jinja2.filter.FILTER hinzufügen können.Hinzufügen eines benutzerdefinierten Filters zu jinja2 unter Pyramide

Aber in der jinja2 documentation wird empfohlen, dass der Filter der Umgebung hinzugefügt wird.

Ich entwickle eine App unter Pyramide und muss meinen benutzerdefinierten Filter definieren und das Folgende tun.

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 

Wo sollte dieses Codefragment platziert werden?

Ich habe versucht, es in der Views-Datei zu platzieren, aber das hat offensichtlich nicht funktioniert.

Wenn ich es in __init__.py platziere, wie stelle ich sicher, dass jinja2 es aufnimmt? Ich meine, wie schicke ich die env zu jinja2 Einstellungen unter Pyramide zurück?

+0

Sie sollten keine neue Umgebung erstellen, sondern auf die eine Pyramide zugreifen. – ThiefMaster

+0

Wie mache ich das? – RedBaron

+0

Von dem, was ich in der Pyramide Docs gelesen habe, wird Jinja nativ nicht unterstützt, also poste bitte den Code, wie du jinja als Renderer in Pyramide registrierst. – ThiefMaster

Antwort

11

Angenommen, Sie verwenden pyramid_jinja2, können Sie pyramid_jinja2.get_jinja2_environment() über die Instanz configurator verwenden, um auf die Umgebung zuzugreifen.

aber offenbar können Sie auch register them via the pyramid config file ohne die env direkten Zugriff auf:

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

Und was, wenn ich nicht in Config angeben möchte? Es ist nicht wirklich eine Config-Sache, oder? Es sollte innerhalb des Codes verdrahtet sein. Config sind für bewegliche Bits gedacht, die für dev/prod-Stufen unterschiedlich sind. –

+0

Einige Ergänzungen: config.include ('pyramid_jinja2') config.commit() # Sie könnten das hier jinjaEnv = config.get_jinja2_environment() – tariqdaouda

5

Für Vollständigkeit dies wäre, wie Sie den Filter in Code registrieren.

# __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

Dieses ist großartig! – juliusmh