2023. 12. 2. 19:47ㆍWeb/Flask
이번에는 템플릿 필터를 직접 만드는 방법에 대해서 알아보자
템플릿 필터는 이미 전체 답변 개수를 구할 때 해보았다
{{ question.answer_set|length }}와 같이 템플릿에서 사용한 객체에 파이프라인 문자 |를 붙여 필터 기능을 한다
( {{ question.answer_set|length }}의 length는 전체 답변 개수를 구할 때 사용한 템플릿 필터이다)
질문 목록 화면의 작성일시를 보자
작성일시의 날짜값은 datetime 객체이다
현재 질문 목록 템플릿에서는 datetime 객체를 문자열로 표시했으므로
2023-12-02 16:56:38.933828과 같은 값으로 표시된다
대부분의 게시판 서비스에서는 시간을 이런 식으로 표시하지 않는다
템플릿 필터를 사용하면 이런 출력 문자열을 다듬을 수 있다
템플릿 필터 만들기
먼저 datetime 객체를 보기 편한 문자열로 만들수 있는 템플릿 필터를 만들어보자
아래처럼 pybo/filter.py 파일을 생성하자
filter.py 파일을 pybo디렉터리가 있는곳에 생성하고 위와 같이 format_datetime 함수를 만들었다
format_datetime 함수는 전달받은 datetime 객체(value)를
날짜포맷형식(fmt)에 맞게 변환하여 리턴하는 함수이다
만약 fmt가 전달되지 않을 경우 디폴트 값인 '%Y년 %m월 %d일 %p %I:%M'이 적용된다
항목 | 설명 |
%Y | 년 |
%m | 월 |
%d | 일 |
%p | AM, PM (오전, 오후의 구분) |
%I | 시간 (0~12 시로 표현) |
%M | 분 |
앱에 필터 등록하기
필터를 템플릿에서 사용하려면 pybo/__init__.py 파일의 create_app 함수를 아래처럼 수정해야 한다
format_datetime 함수를 임포트한 다음 app.jinja_env.filters['datetime']와 같이
datetime이라는 이름으로 필터를 등록해 주었다
필터 사용해 보기
이제 필터를 사용할 차례이다
먼저 질문 목록 템플릿에 작성한 필터를 적용해 보자
{{ question.create_date|datetime }}과 같이 파이프라인 문자와 함께 datetime 필터를 적용했다
datetime 필터가 적용되었으므로 format_datetime 필터 함수가 실행된다
이때 format_datetime의 매개변수 value에 question.create_date가 전달된다
질문 목록 페이지로 이동해 보면 필터가 적용된 작성일시를 확인할 수 있다
질문 상세 화면에 필터 적용하기
질문 상세 템플릿에도 같은 필터를 적용하자
질문 생성일시인 question.create_date와 답변 생성일시인 answer.create_date에 datetime 필터를 적용했다
질문 상세 페이지로 이동해 보면 필터가 적용된 화면을 확인할 수 있다
여기서는 템플릿 필터를 직접 작성하고,
이 필터를 템플릿에 적용하는 방법을 알아보았다
'Web > Flask' 카테고리의 다른 글
[Flask] 3-5 질문에 달린 답변 개수 표시하기 (0) | 2023.12.02 |
---|---|
[Flask] 3-4 게시물에 일련번호 추가하기 (0) | 2023.12.02 |
[Flask] 3-2 게시판 페이징 (0) | 2023.12.02 |
[Flask] 3-1 내비게이션바 (1) | 2023.12.02 |
[Flask] 2-10 폼 모듈로 데이터 검증 더 쉽게 하기 (0) | 2023.12.01 |