flask TODO list - 2 (날짜&시간 형식에 맞춰 출력하기)

1 minute read

개발환경 : 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


date-time-1

2. 원하는 형식에 맞게 날짜와 시간 출력하기

오늘의 날짜와 시간을 잘 출력됐지만, 내가 원하는 형식은 ‘화요일, 4월 16일’ 의 형식이었기 때문에 파이썬 문서를 참고하여 날짜 형식에 대해 찾아봤다. datetime이나 date를 사용해서 날짜와 시간을 표현할 수 있었다.

weekday() 는 0 ~ 6 (월요일 ~ 일요일)로 숫자로 표시되고, 요일을 한국어로 나타내고 싶어서 html 안에 아래와 같이 코드를 적었다.

index.html

date-time-3

date와 정규표현식을 활용해서 날짜, 시간 표현하기.py

from datetime import date

now = date.today()

print(now.strftime("%A / %B %d"))   # Thuesday / April 16

date-time-2

더 생각해 볼 것!

값들이 알맞게 들어간 것인지 content_list를 찍어보고 싶었는데 어떻게 해야 할 지 모르겠다. 흠… 디버깅해서 로그를 찍는 법에 대해 알아봐야겠다.

Comments