반응형
1. 제네릭 뷰 사용하기
Django 제네릭 뷰는 데이터베이스에 저장된
객체들의 정보를 렌더링하기에 편한 기능을
제공한다.
제네릭 뷰에는 두가지 함수가 있다.
DetailView : self.object로 프론토에 정보를 보내준다.
ListView : 객체 목록을 나타는 페이지다. self.object_list에 객체 목록을 정리해서 프론트로 보내준다.
먼저 데이터베이스 구조를 정의한다.
Django에서 models.py에 저장후
마이그레이션을 진행하면,
데이터베이스가 자동으로 생성된다.
# models.py
from django.db import models
class Person(models.Model):
name=models.CharField(max_length = 255)
logo=models.ImageField()
description=models.TextField
updated=models.DateField(auto_now=True)
def __str__(self):
return str(self.name)
urls.py에서 view의 함수를 호출하는 path를
설정해준다. name값으로 해당 함수가 호출되어
백엔드 기능이 작동된다.
HTML로 렌더링이 필요하면, render을
반환하면서 해당 HTML 파일로 데이터 및
렌더링 된다.
urls.py에 정의할 때는
함수이름.as_view()로 정의한다.
from django.urls import path
urlpatterns = [
path = ('', views.person.as_view(), name='personview')
]
이제 views.py를 정의한다.
from django.veiws.generic import ListView
from .models import Person
class Person(ListView):
person = Person
모델링된 데이터베이스 정보를
HTML에 표시는 다음과 같이 진행한다.
제네릭 뷰에서는 모델링된 객체의 값들을
"object_list"로 지정된 템플릿에
보내준다.
일반적으로 for문을 구현해서
리스트의 값들을 출력하는게
편리하다.
{% extends "base.html" %}
{% block content %}
<h2>PERSON</h2>
<ul>
{% for person in object_list %}
<li>{{ person.name }}</li>
{% endfor %}
</ul>
{% endblock %}
2. context 수정하기
django에서 context를 통해
HTML로 데이터를 보내주게 되는데,
object_list 말고 다른 네임을 사용하고자
한다면, context_object_name을 사용하면 된다.
from django.views.generic import ListView
from .models import Person
class PersonView(ListView):
model = Person
context_object_name = 'my_favorite_person_names'
3. context 확장하기
모델에 정의된 정보들 뿐만 아니라
다른 정보까지 보내고자 한다면,
context를 확장하는 함수를 정의하면 된다.
# views.py
from django.views.generic import DetailView
from books.models import Person, Book
class PersonDetail(DetailView):
model = Person
def get_context_data(self, **kwargs):
# 상속한 부모 클래스의 conductor를 실행한다.
context = super(PersonDetail, self).get_context_data(**kwargs)
# 새로운 정보를 context에 추가한다.
context['book_list'] = Book.objects.all()
return context
반응형
댓글