flask TODO list - 2 (날짜&시간 형식에 맞춰 출력하기)
개발환경 : Windows10, VScode
언어 및 프레임워크 : Python3, Flask, MySQL
GIthub repository : YChaeeun/todoList_web
1. 날짜 및 시간 가져오기
지난 번의 실패 …
지난 번에 DB 연결해서 내용은 잘 출력했는데, 시간은 자꾸 오류가 나거나 출력이 되지 않았다. 지난 번에 시도했던 방법은 render
할 때, content_list
에 날짜를 추가한 뒤 넘겨주도록 만들었었다. 그런데 시간이나 날짜가 출력되지 않았다. 그런데 생각해보니, 딕셔너리에 하나하나 값을 넣는 것은 비효율적인 방법인 것 같아서 다른 방법을 찾아봤다.
main.py
from datetime import datetime
@app.route('/')
def index():
content_list=todo_list_dao.get_todolist()
for i in range(len(content_list)):
content_list[i]['now'] = datetime.today()
# 추가가 맞게 된 건지 찍어보고 싶은 데 어떻게 해야 할지 모르겠다
html = render_template('index.html', data_list=content_list)
return html
index.html
# 출력되지 않았음
방법 1 : render 할 때 시간 값을 변수로 넘겨주기
변수 now=datetime.today()
를 직접 render
로 넘겨주었더니 날짜와 시간이 잘 출력되었다.
main.py
from datetime import datetime
@app.route('/')
def index():
content_list=todo_list_dao.get_todolist()
html = render_template('index.html', data_list=content_list, now=datetime.today())
return html
index.html
방법 2 : context_processor 사용하기 참고
반복되는 변수의 경우, context_processor
라는 기능을 사용해 매번 변수를 만들어서 넘겨주지 않아도 해당 변수를 사용할 수 있다는 것을 알게 되었다. context_processor
는 다른 템플릿들 보다 먼저 render
되기 때문에 반환된 dict
값을 다른 템플릿에 집어 넣을 수 있다.
To inject new variables automatically into the context of a template, context processors exist in Flask.
지금 내가 하고 있는 프로젝트는 페이지가 한 개라 상관없었지만, 만약 페이지 수가 많아지고 시간처럼 꼭 써야하는 변수를 하나하나 방법1 처럼 넘겨주기 힘들 때 사용하면 될 것 같다.
main.py
@app.context_processor
def inject_now():
return {'now' : datetime.today()}
index.html
2. 원하는 형식에 맞게 날짜와 시간 출력하기
오늘의 날짜와 시간을 잘 출력됐지만, 내가 원하는 형식은 ‘화요일, 4월 16일’ 의 형식이었기 때문에 파이썬 문서를 참고하여 날짜 형식에 대해 찾아봤다. datetime
이나 date
를 사용해서 날짜와 시간을 표현할 수 있었다.
weekday() 는 0 ~ 6 (월요일 ~ 일요일)로 숫자로 표시되고, 요일을 한국어로 나타내고 싶어서 html 안에 아래와 같이 코드를 적었다.
index.html
date와 정규표현식을 활용해서 날짜, 시간 표현하기.py
from datetime import date
now = date.today()
print(now.strftime("%A / %B %d")) # Thuesday / April 16
더 생각해 볼 것!
값들이 알맞게 들어간 것인지 content_list
를 찍어보고 싶었는데 어떻게 해야 할 지 모르겠다. 흠… 디버깅해서 로그를 찍는 법에 대해 알아봐야겠다.
Comments