본문 바로가기
카테고리 없음

[Django]CBV(Class Based View)에서 템플릿으로 변수 가져오기 / Iterate by Serializers

by HGHG 2022. 5. 27.

[Django]CBV(Class Based View)에서 템플릿으로 변수 가져오기 / Iterate by Serializers

from django.core import serializers
# Create your views here.
from django.views.generic import TemplateView

class SomeClass(TemplateView):
    model = SomeModel
    context_object_name = 'someModel'
    template_name = 'home/someTemplate.html'

    def get_context_data(self, **kwargs):
        object_list = SomeModel.objects.all()

        #Serializer
        object_list = serializers.serialize("python",object_list)

        return super(SomeClass, self).get_context_data(object_list=object_list, **kwargs)

                <div>
                    {% for object in object_list %}
                        {% for field, value in object.fields.items %}
                        <h3>{{field}}</h3>
                        <h3>{{value}}</h3>
                        {% endfor %}
                    {% endfor %}
                </div>

CBV 이므로 urls.py에서 as_view()로 view를 매핑해주어야 해당 template에서 view를 읽을 수 있으며, 해당 model object에 접근이 가능하다.

해당 Model의 Field가 너무 많아서 for문 Iterate를 하여 전체 value를 출력해야했다.


               <div>
                    {% for object in object_list %}
                     <h3> {{ object.field_1 }} : {{ object_value_1 }} </h3>
                     <h3> {{ object.field_2 }} : {{ object_value_2 }} </h3>
                     <h3> {{ object.field_3 }} : {{ object_value_3 }} </h3>
                     <h3> {{ object.field_4 }} : {{ object_value_4 }} </h3>
                     <h3> {{ object.field_5 }} : {{ object_value_5 }} </h3>
                                               .
                                               .
                                               .
                    {% endfor %}
                </div>

위처럼 field와 item(value)를 각각 매핑해주는 작업이 비효율적이라 iterate할 수 있는 방법을 찾았고,
Serialize하여 해결하였다.

Serialize

쿼리셋,모델 인스턴스 등의 complex type(복잡한 데이터)를 JSON, XML등의 컨텐트 타입으로 쉽게 변환 가능한 python datatype으로 변환시켜줌
Serializer는 우리가 Django 에서 사용하는 파이썬 객체나 queryset 같은 복잡한 객체들을 REST API에서 사용할 json 과 같은 형태로 변환해주는 어댑터 역할을 한다.

댓글