본문 바로가기
개발 이야기/Python

Python_Flask app에서 filter 만들기

by 농개 2018. 11. 26.
반응형

Jinja2 템플릿에 날짜를 표현 하고 싶다면?

또한 특정 포맷으로 일치 시키고 app단에서 공통 모듈로서 사용하고 싶다면?


filter를 만들면 된다. (jinja2에서 지원하는 기본 필터들이 많은 걸로 알고 있다만...)


먼저 filter를 모아둘 소스파일을 따로 만들어보자. (굳이 따로 안만들어도 된다만... 기능별로 묶는걸 습관화 하려고 ㅎㅎ)



./filter.py

1
2
3
4
5
6
import babel
 
def format_datetime(value, format='yyyy-MM-dd HH:mm:ss'):
    return babel.dates.format_datetime(value, format)
 
 
cs


1. babel을 import

2. 사용하고자 할 필터 함수를 등록, 여기서는 날짜표시를 위한 datetime을 만듬

3. value는 {{ data | 필터함수(format) }} 의 data값고 format에 default로 yyyy-MM-dd HH:mm:ss를 설정해줬다.

4. return 값을 위와 같이 지정



./app.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from flask import Flask
 
 
app = Flask(__name__)
 
 
from .views import home
from .views import auth
from .views import board
 
app.register_blueprint(home.blueprint, url_prefix='/')
app.register_blueprint(auth.blueprint, url_prefix='/auth')
app.register_blueprint(board.blueprint, url_prefix='/board')
 
 
from .filter import *
 
app.jinja_env.filters['datetime'= format_datetime
 
 
cs


1. app.py에서 위와 같이 datetime이란 이름으로 앞서 만든 필터함수를 등록




./template/board/list.html

1
2
3
4
5
6
7
8
9
{% for board in collection %}
  <div class="row featurette">
    <div class="col-md-7">
      <span class="badge badge-info">{{board.writer}}</span>
      <h2 class="featurette-heading">{{ board.title }} <small class="text-muted">{{board.date | datetime}}</small></h2>
      <p class="lead">{{board.contents}}</p>
    </div>
  </div>
{% endfor %}    
cs


1. 사용할 html파일에서 위와같이 {{ ~~ | datetime }} 형태로 사용가능







반응형