擅长:python、mysql、java
<p>我刚刚遇到了这个问题,我发现解决方案是用<code>@contextfunction</code>修饰符装饰call方法。它告诉运行时将活动上下文作为第一个参数传递给call方法。在</p>
<pre><code>from jinja2 import nodes
from jinja2.ext import Extension
from jinja2.utils import contextfunction
class MyExtension(Extension):
"""See http://jinja.pocoo.org/docs/2.10/extensions/#module-jinja2.ext
for more information on how to create custom Jinja extensions.
"""
tags = set(['myext'])
def __init__(self, environment):
super(MyExtension, self).__init__(environment)
def parse(self, parser):
lineno = next(parser.stream).lineno
# Parse args if you need them ...
# args = [parser.parse_expression()]
node = nodes.CallBlock(self.call_method('_myext_method', args),
[], [], []).set_lineno(lineno)
return parser.parse_import_context(node, True)
@contextfunction
def _myext_method(self, context, args, caller):
# Return what you need
return "Hello I am a custom extension, rendered with: %r" % context
</code></pre>