self.writeline('caller = ')
self.macro_def(macro_ref, call_frame)
self.start_write(frame, node)
- self.visit_Call(node.call, call_frame, forward_caller=True)
+ self.visit_Call(node.call, frame, forward_caller=True)
self.end_write(frame)
def visit_FilterBlock(self, node, frame):
}))
t = env.get_template('child.html')
assert t.render() == '42'
+
+ def test_caller_scoping(self, env):
+ t = env.from_string('''
+ {% macro detail(icon, value) -%}
+ {% if value -%}
+ <p><span class="fa fa-fw fa-{{ icon }}"></span>
+ {%- if caller is undefined -%}
+ {{ value }}
+ {%- else -%}
+ {{ caller(value, *varargs) }}
+ {%- endif -%}</p>
+ {%- endif %}
+ {%- endmacro %}
+
+
+ {% macro link_detail(icon, value, href) -%}
+ {% call(value, href) detail(icon, value, href) -%}
+ <a href="{{ href }}">{{ value }}</a>
+ {%- endcall %}
+ {%- endmacro %}
+ ''')
+
+ assert t.module.link_detail('circle', 'Index', '/') == (
+ '<p><span class="fa fa-fw fa-circle">'
+ '</span><a href="/">Index</a></p>')