-
5. Django: ViewsPython/초간단 장고 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을 뷰와 연결해주었습니다.
반응형