53. django view.py 다듬기

53.1. view.py 수정하기

43.2 Django 상세 페이지 등록 - view.py 에서 잠깐 언급했었습니다.

장고는 기본적인 기능은 장고에가 제공할테니
로직 구현에 신경쓰세라고 하듯이 편의성을 많이 제공하고 있습니다.

처음 장고를 시작했을때

1
2
class blogList(generic.ListView):
    model = PyBlog

이거만 가지고 동작하는게 참 신기하고 이상했습니다. 목록데이터를 보여주는데..
단 2줄 만에 끝나니까요.~

이제 소스좀 다듬어 보겠습니다.

1
super(blogDetail,self).get_context_data(**kwargs) #version python2.X 사용
1
super().get_context_data(**kwargs) #version python3.X 사용

super().get_context_data()로 부모클래의 기본 context를 호출합니다. 3.x부터는 super()만 사용해도 되는걸로 알고 있습니다. context에 쿼리 결과 넣고, html head에 들어갈 og, descript도 담아 놓았습니다. 처리가 다 되면 blog/blogDetail.html 로 랜더링합니다.

43.2 Django 상세 페이지 등록 - view.py 소스보다 좀 더 깔끔합니다.^__^

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#myapp/blog/views.py
from django.shortcuts import render
from django.views import generic
from django.utils.functional import cached_property
from .models import PyBlog, PyBlogDetail

class blogList(generic.ListView):
    model = PyBlog

class firstIndex(blogList, generic.View):
    template_name = "index.html"

    def get_context_data(self, **kwargs):
        context             = super().get_context_data(**kwargs)
        context['title_nm'] = "00 클라우드 서버 구축부터 Django 사이트 오픈까지"
        context['ogImgUrl'] = "https://i.ibb.co/nP1QDt1/nginx-uwsgi-django-mysql.png"
        context['descript'] = "현재 보고 계시는 pythonblog는 처음 시작부터 로컬환경과 운영서버의 환경을 셋팅하고 python Django web framework를 활용하여 사이트를 오픈하는 과정이 담겨있습니다."
        return context

class blogDetail(blogList, generic.View):
    template_name   = "blog/blogDetail.html" 

    def get_context_data(self, **kwargs):
        context   = super().get_context_data(**kwargs)      
        query_set = PyBlog.objects.filter(id=self.kwargs['pk'])             
        query_set = query_set.values('id','title','update_dt','regist_dt',
                                    'pb_detail__detail_id',
                                    'pb_detail__sub_title','pb_detail__img_url','pb_detail__img_size',
                                    'pb_detail__content_body'
                                    ).order_by('pb_detail__sub_title')

        context['dataList'] = query_set
        context['title_nm'] = query_set[0]['title'] 
        context['descript'] = query_set[0]['pb_detail__content_body'][:320]
        context['ogImgUrl'] = query_set[0]['pb_detail__img_url']
        return context