이번 포스팅에서는 모델의 저장한 값들을 표로 출력을 해볼텐데요.
이때 이용할 라이브러리는 Pandas 입니다.
판다스 설치
Pandas는 기본적으로 설치된 라이브러리가 아니기 때문에
터미털창에 pip install pandas를 입력한 후 먼저 해당 라이브러리를 설치해줘야 합니다.
모델 생성
참고로 우리가 사용할 모델은 해당포스트에서 생성한 Cars 모델을 사용할 것입니다.
미리 5개의 CARS 인스턴스를 생성하였고, admin에서 확인해보니 아래와 같은 값들이 저장되어 있네요.
![[장고 기초] 웹 페이지에 Pandas를 적용한 Table 출력 - undefined - 모델 생성 [장고 기초] 웹 페이지에 Pandas를 적용한 Table 출력 - undefined - 모델 생성](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
참고로 해당 인스터의 값들은 아래와 필드와 값으로 이루어져 있습니다.
![[장고 기초] 웹 페이지에 Pandas를 적용한 Table 출력 - undefined - 모델 생성 [장고 기초] 웹 페이지에 Pandas를 적용한 Table 출력 - undefined - 모델 생성](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
view 생성
우리가 원하는건 웹페이지 상에 테이블을 생성하는 것이므로 View 함수를 만들어 보겠습니다.
from django.shortcuts import render
from cars.models import Cars
import pandas as pd
def main_view(request):
qs = Cars.objects.all()
context = {'qs' : qs}
return render(request, 'cars/main.html', context)
먼저 Cars.objects.all()를 통해 모델의 저장된 모든 instance를 불러오고 해당 값을 context에 넣어 우리 웹페이지에 띄워보겠습니다.
결과는 당연히 QuerySet 형태가 그대로 출력이 됩니다.
![[장고 기초] 웹 페이지에 Pandas를 적용한 Table 출력 - undefined - view 생성 [장고 기초] 웹 페이지에 Pandas를 적용한 Table 출력 - undefined - view 생성](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
우리가 원하는 필드와 값들이 다 출력되게 하려면 어떻게 해야할까요? 바로 .values()를 추가해주면 됩니다.
def main_view(request):
qs = Cars.objects.all().values()
context = {'qs' : qs}
return render(request, 'cars/main.html', context)
결과는 ..?
![[장고 기초] 웹 페이지에 Pandas를 적용한 Table 출력 - undefined - view 생성 [장고 기초] 웹 페이지에 Pandas를 적용한 Table 출력 - undefined - view 생성](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
우리가 원하는 값은 아니지만 그래도 각 필드의 값들이 다 출력되는것을 알 수 있습니다.
이어서 해볼것은 해당 queryset을 판다스 데이터프레임에 넣는 것입니다.
def main_view(request):
qs = Cars.objects.all().values()
data = pd.DataFrame(qs)
context = {'df' : data}
return render(request, 'cars/main.html', context)
그 결과는 어떨까요?
![[장고 기초] 웹 페이지에 Pandas를 적용한 Table 출력 - undefined - view 생성 [장고 기초] 웹 페이지에 Pandas를 적용한 Table 출력 - undefined - view 생성](https://blog.kakaocdn.net/dn/kM0Mp/btrblkgG3OV/y2kxXCik1nhTzkOxg3hvdk/img.png)
QuerySet 이 사라지고 뭔가 깔끔해지긴 했는데 여전히 우리가 원하는 형태가 아닙니다.
그 다음 추가할것은 바로 .to_html() 입니다.
def main_view(request):
qs = Cars.objects.all().values()
data = pd.DataFrame(qs)
context = {'df' : data.to_html()}
return render(request, 'cars/main.html', context)
결과는..?
![[장고 기초] 웹 페이지에 Pandas를 적용한 Table 출력 - undefined - view 생성 [장고 기초] 웹 페이지에 Pandas를 적용한 Table 출력 - undefined - view 생성](https://blog.kakaocdn.net/dn/cY2nsK/btrbpPUzBS9/A8zW4XwBsEErrPgmIEeNz1/img.png)
이제 뭔가 테이블이 만들어질것같은 느낌이 드시지 않나요?
해당 html 값을 우리가 눈에 보이는 테이블을 만들어 주기 위해선 main.html을 조금 수정해주어야 합니다.
현재 html은 아래와 같은 상태인데요.
<h1> Hello world</h1>
{{ df }}
|safe 필터를 적용 해줍니다. 이렇게되면 <tag>로 이루어져있는 값들이 실제 우리 눈에 보이는 형태로 변형이 됩니다.
<h1> Hello world</h1>
{{ df|safe }}
자! 드디어 우리가 원하는 테이블 형태가 출력되었군요.
![[장고 기초] 웹 페이지에 Pandas를 적용한 Table 출력 - undefined - view 생성 [장고 기초] 웹 페이지에 Pandas를 적용한 Table 출력 - undefined - view 생성](https://blog.kakaocdn.net/dn/bF4V10/btrbq4X4B9E/AwM6MZzsWVFBTWxR8QHJz0/img.png)
참고로, 첫번째 컬럼들을 중앙 정렬 하고싶다면 .to_html인자로 justify='center'을 추가하면 됩니다.
def main_view(request):
qs = Cars.objects.all().values()
data = pd.DataFrame(qs)
context = {'df' : data.to_html(justify='center')}
return render(request, 'cars/main.html', context)
![[장고 기초] 웹 페이지에 Pandas를 적용한 Table 출력 - undefined - view 생성 [장고 기초] 웹 페이지에 Pandas를 적용한 Table 출력 - undefined - view 생성](https://blog.kakaocdn.net/dn/IDhP2/btrbkgS966K/tK5Fwz8NZ6xdw8pAYXyQBK/img.png)
이 글과 읽으면 좋은글
'파이썬 > django(장고)' 카테고리의 다른 글
[django 기초] admin 사용법 (0) | 2021.12.14 |
---|---|
[장고 기초] 기본 html을 이용하여 detail view 구현 해보기 (0) | 2021.11.17 |
[장고 기초] choices를 통한 드롭 다운 메뉴 만들기 (0) | 2021.08.05 |
[django 기초] Foreign Key(외래키)관계에서의 reverse_name 사용법 (0) | 2021.07.30 |
[장고 오류] makemigrations 작동하지 않을때 (0) | 2021.07.23 |
댓글
꼬예님의
글이 좋았다면 응원을 보내주세요!
이 글이 도움이 됐다면, 응원 댓글을 써보세요. 블로거에게 지급되는 응원금은 새로운 창작의 큰 힘이 됩니다.
응원 댓글은 만 14세 이상 카카오계정 이용자라면 누구나 편하게 작성, 결제할 수 있습니다.
글 본문, 댓글 목록 등을 통해 응원한 팬과 응원 댓글, 응원금을 강조해 보여줍니다.
응원금은 앱에서는 인앱결제, 웹에서는 카카오페이 및 신용카드로 결제할 수 있습니다.