用金字塔写jinja2扩展名?

时间:2014-05-13 07:47:50

标签: python pyramid jinja2

我正在尝试使用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 %}

我还需要做什么或者我做错了什么?

1 个答案:

答案 0 :(得分:2)

add_jinja2_extension用于添加文件扩展名,而非Jinja模板扩展名。

模板扩展名应列在jinja2.extensions entry中。

您可以使用settings映射传递这些内容,例如:

settings['jinja2.extensions'] = [SnippetExtension]
config = Configurator(settings=settings)