장고에서 모든 객체를 보여주는 view 를 작성하는 방법은 여러가지가 있다. 그 중에서 현재 사용했던(또는 리팩토링)으로 변경했던 내용들을 정리한다.
- 기본 FBV 로 2개의 multiple 한 쿼리셋을 context 에 담아 템플릿으로 렌더링
- 현재 모델링은 product 모델이 category 모델을 외래키로 참조하고 있어 category.product_set.all 과 같은 참조 방식으로도 사용이 가능하다.
- 그러나 기본 이해를 위해 2개의 변수에 각각의 모델 쿼리셋을 담은 상태로 구현
def home(request):
products = Product.objects.all()
categories = Category.objects.all()
context = {
'products': products,
'categories': categories,
}
return render(request, 'product/home.html', context)
- TemplateView 에서 템플릿에서 사용할 context 변수에 각각의 모델 쿼리셋을 할당하여 사용
- super() 함수를 사용하여 재귀함수를 방지하는 역할을 하자
class Home(TemplateView):
template_name = 'product/home.html'
def get_context_data(self, **kwargs):
context_data = super().get_context_data(**kwargs)
context_data['product_list'] = Product.objects.all()
context_data['category_list'] = Category.objects.all()
return context_data
# urls.py 에서 정의해도 되지만 class 인스턴스를 만들고 바로 url 에 str 타입으로 전달하기 위해 home 변수에 할당
home = Home.as_view()
'장고 > MTV' 카테고리의 다른 글
DRF 객체를 copy 하기 (0) | 2019.06.22 |
---|---|
django normalize_email (0) | 2019.06.21 |
장고 한줄 정리 (0) | 2019.05.15 |
장고 CRUD 기능 구현(4) Delete (0) | 2019.05.07 |
장고 CRUD 기능 구현(3) Update (0) | 2019.05.07 |