class Free(models.Model): @property def created_string(self): time = datetime.now(tz=timezone.utc) - self.registered_date
if time < timedelta(minutes=1): return '방금 전' elif time < timedelta(hours=1): return str(int(time.seconds / 60)) + '분 전' elif time < timedelta(days=1): return str(int(time.seconds / 3600)) + '시간 전' elif time < timedelta(days=7): time = datetime.now(tz=timezone.utc).date() - self.registered_date.date() return str(time.days) + '일 전' else: return False class Comment(models.Model): @property def created_string(self): time = datetime.now(tz=timezone.utc) - self.created
if time < timedelta(minutes=1): return '방금 전' elif time < timedelta(hours=1): return str(int(time.seconds / 60)) + '분 전' elif time < timedelta(days=1): return str(int(time.seconds / 3600)) + '시간 전' elif time < timedelta(days=7): time = datetime.now(tz=timezone.utc).date() - self.created.date() return str(time.days) + '일 전' else: return False
게시판 모델인 Free 클래스와 게시판의 댓글 모델인 Comment 클래스 내부에 추가한 created_string 함수는 파이썬의 Decorator인 property를 사용하여 함수가 아닌 멤버변수와 같은 형식으로 접근 할 수 있게 합니다. @property를 사용함으로써 외부에서 클래스 내부 변수를 참조 할 수 있게 됩니다.
created_string 함수를 살펴보면 time 변수에 현재시간에서 작성시간을 뺀 작성경과 시간을 저장합니다. 그 후 timedelta 메소드를 사용하여 분, 시간, 일 단위로 표시되게 하며 7일이 지날 경우 false를 반환하여 템플릿에서 원래의 Date형식으로 표시되게 구현합니다.
2. 게시글 작성일 표시 templates 변경
게시글 리스트에서 작성일의 표시형식을 변경하기 위해 free_list.html의 작성일 표시 부분인 free.registered_date를 아래와 같이 변경합니다. property를 사용했기에 free.created_string과 같은 형식으로 함수를 호출 할 수 있게 됩니다.