call (콜)
1. 일부 경우에는 다른 매크로 에 매크로를 전달하는 것이 유용할 수 있음. 이를 위해 특별한 call 블록을 사용할 수 있음. 다음 예제는 call 기능을 활용한 매크로를 보여주고 있으며, 이를 어떻게 사용할 수 있는지를 보여줌:
{% macro render_dialog (title, class='dialog') -%}
<div class="{{ class }}">
<h2>{{ title }}</h2>
<div class="contents">
{{ caller() }}
</div>
</div>
{%- endmacro %}
{% call render_dialog ('Hello World') %}
This is a simple dialog rendered by using a macro and
a call block.
{% endcall %}
2. 또한 call 블록에 인수를 다시 전달할 수도 있음.. 이는 loop(반복)를 대체하는 데 유용함. 일반적으로 call 블록은 이름 없는 매크로와 정확히 같은 방식으로 작동함. 다음은 call 블록이 인자와 함께 사용되는 예제임:
{% macro dump_users (users) -%}
<ul>
{%- for user in users %}
<li><p>{{ user.username|e }}</p>{{ caller(user ) }}</li>
{%- endfor %}
</ul>
{%- endmacro %}
{% call(user ) dump_users (list_of_user) %}
<dl>
<dt>Realname</dt>
<dd>{{ user.realname|e }}</dd>
<dt>Description</dt>
<dd>{{ user.description }}</dd>
</dl>
{% endcall %}
PS. 코드 진행순서 설명
list_of_user는 사용자 목록을 담고 있는 변수가 dump_users 매크로의 매개변수 users 자리로 전달됨.
dump_users 매크로는 <ul> 태그로 시작하여 사용자 목록을 반복하며 각 사용자에 대한 정보를 리스트 아이템(<li>)으로 생성함.
각 사용자 아이템에는 사용자 이름이 <p> 태그 안에 출력되고, 그 다음에는 caller 함수가 호출됨. 이 때 user 변수가 caller 함수에 전달됨.
call 블록이 시작됨. 이 블록은 user 변수를 전달하여 dump_users 매크로를 호출함.
dump_users 매크로의 호출 부분에서는 <dl> 태그로 시작하여 사용자의 실제 이름과 설명을 포함한 HTML이 전달됨.
이 HTML 부분은 dump_users 매크로 내부의 caller 함수에서 출력됨. 여기서 user는 call 블록에서 전달된 사용자를 나타냄.
call 블록이 종료됨.
결과적으로, 사용자 목록을 표시하는 dump_users 매크로가 호출되면서 각 사용자에 대한 추가 정보가 포함된 HTML이 전달되고 출력됨.
주소 복사
랜덤 이동