【问题标题】:writing jinja2 extension with pyramid?用金字塔写 jinja2 扩展?
【发布时间】:2014-05-13 07:47:49
【问题描述】:

我正在尝试使用 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: 遇到未知标签“sn-p”

分割模板时:

{% snippet %}

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

【问题讨论】:

  • 嗨,你有答案吗?如果您解决了这个问题,请帮助我,我也面临同样的问题。

标签: python pyramid jinja2


【解决方案1】:

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

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

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

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

【讨论】:

  • @CrazyGeek:并向您的配置添加完整路径(点符号)?
  • @CrazyGeek:为什么jinja2_extensions 中有下划线?
  • 哦,谢谢,现在它不再报错了,让我用新的遗物测试它的工作流程,我会回复你的。
  • 感谢您的帮助,因为它解决了标签呈现问题,但我从 newrelic 获得了空数据,所以请您看看这个stackoverflow.com/questions/20746678/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-31
  • 2011-12-23
  • 2017-03-16
  • 1970-01-01
  • 1970-01-01
  • 2019-09-14
相关资源
最近更新 更多