Python Flask 혹은 Django를 사용하게 되면 HTML에 Jinja2 문법을 사용하여 추가적인 작업을 수행할 수 있습니다.

여기서 Jinja2의 For문을 사용하는 방법을 알아보도록 하겠습니다.


Jinja2를 사용할 때 Python Flask로 다음과 같이 작성했다고 합시다.


예제 소스

@app.route('/', method=['GET'])
def hello_kkamikoon():
    myList = []
    for i in range(0, 10):
        myList.append('count : %d' % i)
    
    return render_template('/app/templates/hello_kkamikoon.html', myList=myList)


위의 파이썬 소스를 실행시켰다는 가정하에 이제 HTML 소스를 보시겠습니다.


<!--source name : hello_kkamikoon.html -->
<!--source dir : /app/templates/hello_kkamikoon.html -->

<html lang="ko">
  <head>
    <title>kkamikoon Jinja2 for</title>
    >
  </head>
  <body>
    <ul>
	  {% for ml in myList %}
	  <li> {{ml}} </li>
	  {% endfor %}
    </ul>
  </body>
</html>



결과

<!--source name : hello_kkamikoon.html -->
<!--source dir : /app/templates/hello_kkamikoon.html -->

<html lang="ko">
  <head>
    <title>kkamikoon Jinja2 for</title>
    >
  </head>
  <body>
    <ul>
	  <li> count : 0 </li>
	  <li> count : 1 </li>
	  <li> count : 2 </li>
	  <li> count : 3 </li>
	  <li> count : 4 </li>
	  <li> count : 5 </li>
	  <li> count : 6 </li>
	  <li> count : 7 </li>
	  <li> count : 8 </li>
	  <li> count : 9 </li>
    </ul>
  </body>
</html>


myList에 있는 값이 그대로 html로 옮겨져서 반복되는 것을 볼 수 있습니다.







Jinja2를 사용할 때 원래는 break문을 기본적으로 사용할 수 있을 것 같지만, 전혀 그렇지 않습니다... 허허...

보통은 break는 기본으로 제공하지만 jinja2는 예외더랍니다.


따라서 추가적인 작업이 필요합니다.


01. jinja2.ext.loopcontrols 적용

Jinja2에서 'jinja2.ext.loopcontrols'를 적용해주면 추가적인 작업 없이 {% break %}를 사용할 수 있습니다.

# ==============================
# flask_folder/run.py (실행파일)
# ==============================
import sys
from app import app

app.run(host='0.0.0.0', port=80, threaded=True)


위와 같이 run.py가 작성되어 있다고 가정합니다.

그러면 이제 jinja2.ext.loopcontrols를 적용해주어야 하는데, 이는 다음과 같이 적용해줄 수 있습니다.


# ==============================
# flask_folder/app/__init__.py
# ==============================
from flask import Flask, request, session, g, redirect, url_for, abort, render_template

# Configurations
app.config.from_object('config')

# Jinja2 environment add extension
app.jinja_env.add_extension('jinja2.ext.loopcontrols')


반드시 위와 같은 방법으로 추가해주지 않아도 되지만, 저는 이 방법으로 작업을 수행했습니다.




02. {% break %} 사용 예제

아래는 {% break %}문을 사용하는 예제 입니다.


{% for m in menu %}
    {% if m.case in cases %}
       <li class="on">
            {{ m.data }}
       </li>
    {% else %}
       {% break %}
    {% endif %}
{% endfor %}




Python Flask 혹은 Django를 사용하게 되면 HTML에 Jinja2 문법을 사용하여 추가적인 작업을 수행할 수 있습니다.

여기서 Jinja2의 리스트, 그러니까 배열을 사용하는 방법을 알아보도록 하겠습니다.


Jinja2를 사용할 때 HTML 소스코드 내부에 다음과 같은 for문을 작성했다고 합시다.


배열은 ['1', '2', '3']이라고 가정합시다.


예제 소스

{% for item in mylist %}
   <p> your item is : {{ item }} </p>
{% endfor %}


위와 같이 코드를 작성했을 때 <p>로 작성된 배열 목록들이 쭈루룩 출력될 것입니다.


결과

your item is : 1
your item is : 2
your item is : 3


이는 다음과 같은 예제도 똑같이 나타나게 됩니다.


예제 소스

<p> your item is : {{ mylist[0] }} </p>
<p> your item is : {{ mylist[1] }} </p>
<p> your item is : {{ mylist[2] }} </p>


결과

your item is 1
your item is 2
your item is 3


이처럼 배열의 index 값을 설정해서 사용해줄 수 있습니다.


만약 세 번째 아이템만 출력하고 싶다면 다음과 같은 예제처럼 하면 됩니다.


예제 소스

{% for item in mylist %}
   {% if loop.index == 2 %}
   <p> your item is : {{ item }} </p>
   {% endif %}
{% endfor %}


결과

your item is 3

jinja2에서 for문의 인덱스 값은 다른 선언 없이 loop.index라고 작성하면 됩니다.




'WEB PROGRAMMING > Jinja2' 카테고리의 다른 글

[Jinja2] For 문 사용하는 방법  (0) 2019.02.19
[Jinja2] break문 사용하는 방법  (0) 2019.02.12

+ Recent posts