我正在尝试使用Pyramid编写自定义jinja2扩展。
扩展代码为:
from jinja2 import nodes
from jinja2.ext import Extension
class SnippetExtension(Extension):
tags = set(['snippet'])
def __init__(self, environment):
print "Init"
super(SnippetExtension, self).__init__(environment)
def parse(self, parser):
print "Parse"
stream = parser.stream
tag = stream.next()
print "Writing"
return nodes.Output('<div>Test</div>').set_lineno(tag.lineno)
我在__init__.py
加载扩展程序,如下所示:
def main(global_config, **settings):
""" This function returns a Pyramid WSGI application.
"""
engine = engine_from_config(settings, 'sqlalchemy.')
DBSession.configure(bind=engine)
Base.metadata.bind = engine
config = Configurator(settings=settings)
config.include('pyramid_jinja2')
config.include('pyramid_fanstatic')
config.add_jinja2_renderer('.html')
config.add_static_view('static', 'static', cache_max_age=3600)
config.add_route('home', '/')
add_jinja2_extension(config,SnippetExtension) #<--- load the extension
config.scan()
return config.make_wsgi_app()
然而我收到错误:
TemplateSyntaxError:遇到未知标记'代码段'
分离模板时:
{% snippet %}
我还需要做什么或者我做错了什么?
答案 0 :(得分:2)
add_jinja2_extension
用于添加文件扩展名,而非Jinja模板扩展名。
模板扩展名应列在jinja2.extensions
entry中。
您可以使用settings
映射传递这些内容,例如:
settings['jinja2.extensions'] = [SnippetExtension]
config = Configurator(settings=settings)