jinja에서 variable 선언하기.

jinja에서 직접 변수를 선언해봅시다.

  • 보통 jinja에서는 forif만을 사용합니다 변수는 render_template에서 함께 넘어온 것들 뿐이죠.
  • 그러나, 경우에 따라서는 직접 내부에서 값을 선언해주는 것이 필요할 때가 있습니다.
  • 어떻게 할 수 있을까요?

do it

  • 언제나 그렇듯 매우 쉽습니다. 하하하.
  • 앞에 set을 붙여주면 끝납니다.

<div>
    {% set a = 3 %}
    {{a}}    
</div>

  • 비슷하게, 리스트를 선언하고 값을 넣어줄 수도 있습니다.
  • 그러나, a.append(i) 부분이 statement가 아니라, statement with print로 되어 있는 것을 알 수 있습니다. 즉, 해당 부분이 실제 Html에서 출력이 된다는 것이죠. 해당 부분이 따로 값을 리턴하지 않기 때문에, 그냥 None이 리턴되기는 합니다.

<div>
    {% set a = [] %}
    {% for i in range(0, 10) %}
        {{ a.append(i) }}
    {% endfor %}
    {{a}}
</div>

  • 사실, 이럴때는 그냥 이 부분을 script로 넘겨버리면 되기는 합니다.

<div>
    <script>
        {% set a = [] %}
        {% for i in range(0, 10) %}
            {{ a.append(i) }}
        {% endfor %}
    </script>
    {{a}}
</div>

  • 비슷하게, 딕셔너리에 대해서도 다음처럼 만들수 있죠.

<div>
    <script>
        {% set a_lst = [] %}
        {% for i in range(0, 10) %}
            {{ a_lst.append(i) }}
        {% endfor %}

        {% set b_dict = {} %}
        {% for i in range(0, 10) %}
            {{ b_dict.update( {"key_"+i|string: i+10} )}}
        {% endfor %}
    </script>
    {{a_lst}}
    <br>
    {{b_dict}}

</div>

wrap-up

  • 생각보다, jinja template에서 Python을 돌리는 것이 크게 어렵지는 않습니다. 물론 렌더링할 때 시간이 좀 걸릴 수는 있겠지만요.
  • 필요한 함수, 라이브러리들은 render_template에서 함께 넘겨주고, 값을 처리할 때도 꽤 비슷한 방식으로 다 할 수잇는 것 같네요.
  • 이렇게 처리할 경우, backend, frontend가 합쳐지니까 꽤 편하게 코딩할 수 있는 장점도 있는 것 같습니다.

reference

댓글남기기