def filter_stream(self, stream):
"""
We convert
{{ some.variable | filter1 | filter 2}}
to
{{ some.variable | filter1 | filter 2 | bind}}
... for all variable declarations in the template
This function is called by jinja2 immediately
after the lexing stage, but before the parser is called.
"""
while not stream.eos:
token = next(stream)
if token.test("variable_begin"):
var_expr = []
while not token.test("variable_end"):
var_expr.append(token)
token = next(stream)
variable_end = token
last_token = var_expr[-1]
if (not last_token.test("name")
or not last_token.value in ('bind', 'inclause', 'sqlsafe')):
param_name = self.extract_param_name(var_expr)
# don't bind twice
var_expr.append(Token(10, 'pipe', u'|'))
var_expr.append(Token(10, 'name', u'bind'))
var_expr.append(Token(2, 'lparen', u'('))
var_expr.append(Token(10, 'string', param_name))
var_expr.append(Token(2, 'rparen', u')'))
var_expr.append(variable_end)
for token in var_expr:
yield token
else:
yield token
评论列表
文章目录