_μ²μ λ¬Έμ κ° λ°μν μ€μ ν νλ¦Ώμ λ μμ©κ΅¬ κ°μμ§λ§ μ΄ ν νλ¦Ώμ λ¬Έμ λ₯Ό λ³΄λ€ μ§κ΄μ μΈ λ°©μμΌλ‘ μ€λͺ ν©λλ€._
λ€μ ν νλ¦Ώμ΄ μλ€κ³ κ°μ ν©λλ€.
{%- macro _tag(tag, id=none, classes=(), attrs={}) -%}
<{{ tag }}
{% if id %} id="{{ id }}" {% endif %}
{% if classes %} class="{{ classes|join(' ') }}" {% endif %}
{{ attrs|xmlattr }}>
{% if caller %} {{ caller() }} {% endif %}
</{{ tag }}>
{%- endmacro -%}
νΉμ κ²½μ°μ {% call %}
λ₯Ό μλνλ μμ λ 벨 ν
νλ¦Ώκ³Ό ν¨κ»:
{%- macro _div() -%}
{% call _tag('div', *varargs, **kwargs) %}
{% autoescape false %}
{% if caller %} {{ caller() }} {% endif %}
{% endautoescape %}
{% endcall %}
{%- endmacro -%}
μ§κ΄μ μΌλ‘ {% call _div(...) %} <b>foo</b> {% endcall %}
λ₯Ό νλ©΄ <b>foo</b>
λ₯Ό _tag
맀ν¬λ‘μ μ λ¬ν΄μΌ ν©λλ€. κ·Έλ¬λ©΄ 맀ν¬λ‘κ° λ λλ§ν©λλ€(μλ μ΄μ€μΌμ΄ν λλΆμ λ§ κ·Έλλ‘). κ·Έλ¬λ μ€μ κ²°κ³Όλ UndefinedError: No caller defined
$8$#$ λ΄λΆμ {{ caller() }}
νμμ _div
μ
λλ€. caller
{% call %}
λΈλ‘μΌλ‘ νμ₯λμ§ μμ μμμ μ€λͺ
ν κ²κ³Ό κ°μ μ°μ νΈμΆμ λ°©μ§νλ κ²μ²λΌ 보μ
λλ€.
2.8μ μλ‘μ΄ λΈλ‘ ν λΉ κΈ°λ₯μ μ¬μ©νλ μΆμ ν ν΄κ²° λ°©λ²μ΄ μμ΅λλ€.
{%- macro _div() -%}
{% set content %}
{% if caller %} {{ caller() }} {% endif %}
{% endset %}
{% call _tag('div', *varargs, **kwargs) %}
{% autoescape false %} {{ content }} {% endautoescape %}
{% endcall %}
{%- endmacro -%}
κ·Έλ¬λ λ¬Όλ‘ μλ λ²μ μ΄ ν¨μ¬ λ λ°λμ§ν κ²μ λλ€.
μ΄ μμ μλ₯Ό ν΅ν΄ μ΄κ²μ μ¬νν μ μμ΅λλ€.
{% macro a() %}
start of a
{% call b() %}
{{ caller() }}
{% endcall %}
end of a
{% endmacro %}
{% macro b() %}
start of b
{{ caller() }}
end of b
{% endmacro %}
{% call b() %}
inside b only
{% endcall %}
{#
{% call a() %}
inside a
{% endcall %}
#}
μ΄κ²μ μλ κ·Έλλ‘ μ μλνλ©° λ§μ§λ§ λΈλ‘μ΄ μ£Όμ μ²λ¦¬λμ§ μμ λ λ€μκ³Ό κ°μ μμΆμ μ μ»μ΅λλ€.
Traceback (most recent call last):
...
File "/usr/lib/python2.7/dist-packages/jinja2/environment.py", line 894, in render
return self.environment.handle_exception(exc_info, True)
File "templates/test.j2", line 19, in top-level template code
{% call a() %}
File "templates/test.j2", line 3, in template
{% call b() %}
File "templates/test.j2", line 11, in template
{{ caller() }}
File "templates/test.j2", line 4, in template
{{ caller() }}
jinja2.exceptions.UndefinedError: No caller defined
ν΄κ²° λ°©λ²μ λν μμ μ°Έκ³ μ¬ν:
2.8μ μλ‘μ΄ κΈ°λ₯λ μ λλ‘ μλνλ―λ‘ νμνμ§ μμ΅λλ€.
{% macro a() %}
start of a
{% set content=caller() %}
{% call b() %}
{{ content }}
{% endcall %}
end of a
{% endmacro %}
{% macro b() %}
start of b
{{ caller() }}
end of b
{% endmacro %}
{% call b() %}
inside b only
{% endcall %}
{% call a() %}
inside a
{% endcall %}
μ΄κ²μ νμ κ°μ₯ κ°κΉμ΄ 맀ν¬λ‘λ‘ λ²μλ₯Ό μ§μ νκΈ° λλ¬Έμ μΌμ’ μ μλμ μ λλ€. wontfixλ‘ λ«μ΅λλ€.
μ°Έκ³ λ‘ {% set caller_ = caller %}
λ μ μλνλ―λ‘ νμν λλ§λ€ νΈμΆν μ μμ΅λλ€.
μ΄μ¨λ μ΄κ²μ FAQ νλͺ©μ κ°μΉκ° μμ΅λλ€. λ€λ₯Έ νΈμΆ λΈλ‘μΌλ‘ μ΄λνκΈ° μ μ {% set caller_ = caller %}
κ° λμμ΄ λλ€λ κ²μ μ λκΉμ§ μΌλ§ μ μ μ νν λμΌν λ¬Έμ κ° μμλ λλ£λ₯Ό κΈ°μ΅ν©λλ€.
μ, λ¬Έμμ λ£κ³ μΆμ μλ μμ΅λλ€.
κ°μ₯ μ μ©ν λκΈ
ν΄κ²° λ°©λ²μ λν μμ μ°Έκ³ μ¬ν:
2.8μ μλ‘μ΄ κΈ°λ₯λ μ λλ‘ μλνλ―λ‘ νμνμ§ μμ΅λλ€.