My Image

Django 포스팅

[Django] 장고에서 설치없이 초간단하게 달력 기능 구현하기

Doyeon0430 | 2023년 07월 31일

Django 이미지

이번시간에는 파이썬에서 제공하는 calendar로 달력을 만들겠습니다.

calendar는 파이썬에서 제공하는 라이브러리로 모듈만 가져오면 간편하게 사용할 수 있습니다.

지금부터 views.py에서 calendar를 설정하고 템플릿에서 사용자가 보여지게 만들겠습니다.

 

  1. 장고에서 달력 만들기 - views.py

  2. 장고에서 달력 만들기 - templates

  3. 장고에서 달력 만들기 - 결과화면

 

 

1. 장고에서 달력 만들기 - views.py

달력을 사용하려면 날짜들을 불러와 입력해줘야합니다.

화면에 호출되기 위해 년도와 월 등을 가져오겠습니다.

 

1. views.py

from datetime import datetime

...
introduce_data = {'main_view': main_view, 'total_count': total_count} #기존 데이터
...

#새로 추가된 코드
today = datetime.today()
month = today.month
year = today.year
introduce_data['today'] = today
introduce_data['month'] = month
introduce_data['year'] = year

기존에 사용하던 코드밑에 위와 같이 날짜들을 넣어주세요.

 

2. views.py

import calendar

...
introduce_data = {'main_view': main_view, 'total_count': total_count} #기존 데이터
...

#새로 추가된 코드
cal = calendar.monthcalendar(year, month)
cal_data = []

for week in cal:
    week_data = []
    for day in week:
        if day == 0:
            week_data.append((None, None))
        else:
            count = 1 #호출 데이터
            week_data.append((day, count))
    cal_data.append(week_data)

introduce_data['cal_data'] = cal_data

cal은 년도와 월에 해당하는 데이터를 2차원 리스트로 가져옵니다.

cal_data로 빈 배열을 선언합니다.

다음으로 for문을 이용해 week를 day로 세분화 시키고

day가 있을 때 append로 값을 저장합니다.

count는 달력에 넣을 데이터이며 예시로 1을 넣겠습니다.

마지막으로 빈 배열인 cal_data에 지금까지 넣었던 2차원 리스트를 추가합니다.

 

3. views.py

return render(request, 'myprofile/introduce.html', introduce_data)

이제 데이터들을 템플릿으로 보내주겠습니다.

 

 

2. 장고에서 달력 만들기 - templates

html과 css로 간단한 달력 구조를 디자인했습니다.

목적은 하루에 올리는 포스팅 개수를 알려주고자 만들었습니다.

 

1. HTML 코드

<h2 class="calendar_title">포스팅 활동량 [{{ year }}년 {{ month }}월 기준]</h2>
<table class="calendar">
  <thead>
    <tr class="calendar_header">
      <th>월</th>
      <th>화</th>
      <th>수</th>
      <th>목</th>
      <th>금</th>
      <th>토</th>
      <th>일</th>
    </tr>
  </thead>
  <tbody>
    {% for week in cal_data %}
    <tr>
      {% for day, count in week %}
      <td class="calendar_day" {% if day == today.day %} style="background-color: rgb(252 241 202);" {% endif %}>
        {% if day %}
        <div class="date">{{ day }}</div>
        {% if day <= today.day %}
        <div class="count">{{ count }}개</div>
        {% endif %}
        {% endif %}
      </td>
      {% endfor %}
    </tr>
    {% endfor %}
  </tbody>    
</table>

태그는 테이블로 구성했으며 cal_data를 for문으로 만듭니다.

그리고 week를 day와 count로 나눠주는데 값이 2차원 리스트라 콤마(,)를 사용했습니다.

이제 if문으로 day가 있을 때 호출합니다.

 

2. CSS 코드

/* 포스팅 활동량 시작 */
.calendar_title {
    text-align: center;
    font-size: 1.3rem;
    font-weight: 900;
    margin-bottom: 10px;
}

.calendar {
    width: 70%;
    border-collapse: collapse;
    table-layout: fixed;
    margin: 1rem auto;
    background-color: #ffffff;
    box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.1);
}

.calendar_header th {
    text-align: center;
    border: 1px solid #c9c9c9;
    padding: 8px;
}

.calendar_day {
    text-align: center;
    height: 5rem;
    border: 1px solid #c9c9c9;
    position: relative;
}

.calendar_day .date {
    font-size: 1rem;
    position: absolute;
    top: 5%;
    right: 5%;
}

.calendar_day .count {
    color: #d82e2e;
    font-size: 1.2rem;
    font-weight: 600;
    display: inline-block;
}
/* 포스팅 활동량 끝 */

css까지 적용해봤습니다.

마지막으로 결과를 확인하겠습니다.

 

 

3. 장고에서 달력 만들기 - 결과화면

달력은 제 블로그에서 직접 작동하고 있으며 아래 링크를 통해 확인가능합니다.

달력에 값은 1로 통일되어있지만 모델값을 설정하면 원하는 데이터를 가져올 수 있습니다.

주소 : 장고에서 달력 만들기

 

달력 결과화면

디장고 달력 결과화면

댓글 (0)

    댓글이 없습니다.

간편 댓글 작성

My Image My Image My Image My Image