ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 5. Django: Views
    Python/초간단 장고 Django 2019. 7. 8. 08:23
    반응형

    1. views.py

    장고에서는 클래스형 뷰와 함수형 뷰가 있습니다. 
    이 글에서는 클래스형 뷰를 사용할 예정입니다.

     

    클래스형 뷰는 미리 만들어진 프리셋을 상속받습니다.
    장고에서는 이 프리셋을 제네릭 뷰라고 합니다. 

     

    제네릭 뷰의 종류는 다음 링크를 참고하십시오. ^^;
    https://wikidocs.net/9623

     

    입력과 수정은 관리자 페이지에서 처리하기로 했기 때문에 
    'Generic Display View의 ListView'만 사용하면 됩니다. 
    조건에 맞는 객체들의 목록을 보여주는 뷰입니다. 

     

    다음 예제는
    Bookmark 테이블(실제로는 클래스)을 읽은 뒤
    'object_list' 변수에 담아
    '모델명소문자_list.html' 템플릿에 넘겨줍니다. 

     

    'object_list' 와 '모델명소문자_list.html' 는
    명시적이지 않은 부분이니 유의하시기 바랍니다.

     

    'ListView' 제네릭 뷰의 마법이라고 생각하시면 됩니다. 

    'template_name'으로 지정도 가능합니다. 

     

    만약 'DetailView' 라는 제네릭 뷰를 상속받으면
    'object' 변수와 '모델명소문자_detail.html' 템플릿을 사용하게 됩니다.  

    # bookmarks/views.py
    
    from django.views.generic import ListView
    from bookmarks.models import Bookmark
    
    
    class BookmarkListView(ListView):
        model = Bookmark
        # paginate_by = 10
    

    코드를 봅시다.

     

    제네릭 뷰 중 하나인 ListView를 임포트합니다.
    모델에서 Bookmark를 임포트합니다. 

     

    그리고 ListView를 상속해서 보여질 클래스를 만듭니다.
    model 속성(클래스 변수)에는 뷰가 출력할 데이터가 들어있는 모델을 지정해야 합니다. 
    Bookmark를 바인딩(오버라이딩)합니다. 

     

    클래스 변수(=속성)는 ListView에서 상속받은 것이기 때문에, 
    이렇게 속성을 다시 지정하는 것을 속성 오버라이딩이라고 합니다. 

     

    많은 속성들이 있습니다. 

    북마크가 많아지면 필요한 페이지 기능도 속성에 포함되어 있습니다. 

    # paginate_by = 10

    하지만 구현하지 않을 것이기 때문에 #을 붙여두었습니다. 

     

     

    2. urls.py 

    위 그림을 보시면 아시겠지만 Views를 작동시키려면 URLs을 지정해야 합니다. 

     

    언제든지 앱을 분리해서 다른 프로젝트에 붙이기 쉽도록 urls.py도 분리하는 게 좋습니다. 

     

    myapp/bookmarks 라는 url이 있다면,
    myapp까지는 config/urls.py 에서
    bookmarks이후는 bookmarks/urls.py 에서 처리하도록 합니다. 

     

    config/urls.py 수정

    config/urls.py 에는 친절하게 다음 안내문이 있습니다.

    # config/urls.py
    
    """
    Including another URLconf
        1. Import the include() function: from django.urls import include, path
        2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
    """

    다른 URLconf (URL configuration)를 포함하는 방법에 대한 설명이네요. 
    include 함수가 필요하네요. 따라해 봅시다. 

    # config/urls.py
    
    from django.contrib import admin
    from django.urls import include, path  # include 를 추가했습니다.
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('bookmarks/', include('bookmarks.urls')),  # 마지막에 쉼표를 붙이면, 추가할 때 편해집니다.
    ]

    bookmarks.urls 는 bookmarks 폴더의 urls.py를 의미합니다.
    (자동생성되지 않는 파일이라 작성해야 합니다.)

     

    앱 단위로 url을 넘겨, 모듈화 시킵니다.
    차후에 프로젝트를 수정하거나 재사용할 때 편합니다. 

     

    urls.py를 'url 라우터' 라고도 합니다. 

     

    config/urls.py 의 안내문 중 읽지 않은 부분을 읽어봅니다. 

    Function views
        1. Add an import:  from my_app import views
        2. Add a URL to urlpatterns:  path('', views.home, name='home')
    Class-based views
        1. Add an import:  from other_app.views import Home
        2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')

    펑션 뷰와 클래스 뷰인 경우, 각각 urls.py에서의 작성 방법이 다릅니다. 

     

    bookmarks/urls.py 작성

    위 안내를 바탕으로 아래 파일을 작성합니다. 

    # bookmarks/urls.py
    
    from django.urls import path
    from bookmarks.views import BookmarkListView
    
    urlpatterns = [
        path('', BookmarkListView.as_view()),
    ]

    URL을 뷰와 연결해주었습니다. 

    반응형
Designed by Tistory.