본문 바로가기

Web/Flask

[Flask] Jinja2 필터함수 등록하기(datetime)

https://flask.palletsprojects.com/en/1.1.x/templating/

 

Templates — Flask Documentation (1.1.x)

Flask leverages Jinja2 as template engine. You are obviously free to use a different template engine, but you still have to install Jinja2 to run Flask itself. This requirement is necessary to enable rich extensions. An extension can depend on Jinja2 being

flask.palletsprojects.com

Flask에서는 Jinja2라는 템플릿 엔진을 이용한다.

템플릿 엔진이란, 템플릿 양식과 특정 데이터 모델에 따른 입력 자료를 합성하여 결과 문서를 출력하는 소프트웨어를 말한다. 즉, Jinja2의 역할은 Flask의 서버에서 가공한 데이터를 html 문서에 뿌려주는 것이다.

 

아무튼 나는 datetime 형식의 데이터를 20xx년 x월 x일 (월)의 형식으로 출력하고 싶어서 Jinja2에서 필터 함수를 만드는 방법을 찾아보았다.

 

def format_datetime(value, format=None):
  if format is None:
    weekdays = ['월', '화', '수', '목', '금', '토', '일']
    wd = weekdays[value.weekday()]
    format = "%Y년 %m월 %d일 ({})".format(wd)
    formatted = value.strftime(format.encode('unicode-escape').decode()).encode().decode('unicode-escape')
  else:
    formatted = value.strftime(format.encode('unicode-escape').decode()).encode().decode('unicode-escape')
  return formatted

 

먼저 다음과 같이 필터 함수를 등록한다.

 

app.jinja_env.filters['datetime'] = format_datetime

 

그리고 Flask에 jinja_env로 필터 함수를 등록한다.('datetime')은 필터함수의 이름이 된다.

html에서 필터함수를 사용할 때에는 {{ date|datetime() }}의 형식으로 사용하면 된다.