일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- django
- 마라마라빔
- 데이터베이스
- 장고
- 최소스패닝트리
- B대면노래방
- 종합설계
- 동적계획법
- codetree
- 모각코
- 그리디알고리즘
- Planned
- 소프트웨어공학
- 알고리즘
- SQL
- 프로그래머스
- 백트래킹
- DFS
- Bellman-Ford
- MyPlaylist
- minimum spanning tree
- 실습
- 코드트리
- Kruskal
- 백준
- BFS
- 함밥
- programmers
- 파이썬
- DP
- Today
- Total
Leta Learns
django | CRUD - Read 본문
CRUD => DB 내의 데이터를
Create 생성하다 | Read 읽다 | Update 수정하다 | Delete 삭제하다
Read
웹페이지 상에서 데이터를 읽어야 하므로 띄워줄 HTML 파일 필요
=> blog 앱 내에 templates/home.html
views.py
from django.shortcuts import render
from .models import Blog
# Create your views here.
def home(request):
blogs = Blog.objects.all() #Blog 객체를 모두 가져온다. -> Blog 테이블의 모든 row를 가져온다.
return render(request, 'home.html', {'blogs' : blogs})
blogs 라는 변수에 바로 윗줄에서 선언한 blogs를 key:value 형태로 저장.
urls.py
from django.contrib import admin
from django.urls import path
from blog.views import * #blog.views에서 선언한 모든 것을 가져옴
urlpatterns = [
path('admin/', admin.site.urls),
path('', home, name='home'),
]
from blog.views import *
=> views의 모든 것을 import해옴
views.home 대신 home만으로 해결
(urls.py 작성 부분 다시 볼 것!)
QuerySet 쿼리셋
: 전달받은 모델의 객체 목록 (객체들이 쿼리셋의 형태로 저장)
쿼리셋에 여러 객체가 들어있으면 for문 사용
{% for blog in blogs %}
{{ blog }}
{% endfor %}
for문 끝나면 꼭 닫아주기 => {% endfor %}
{{ blog }} => 객체 출력. models.py에서 __str__로 self.title이 나오게 설정했으므로 여기서도 제목이 나올 것임.
{% for blog in blogs %}
{{ blog.title }}
{{ blog.writer }}
{{ blog.body }}
{% endfor %}
=> blog 객체 내부 값 title, writer, body를 불러옴
본문(Text) 내용이 길면 요약하는 게 편함 => models.py에 summary 메소드 추가
class Blog(models.Model):
title = models.CharField(max_length=200)
writer = models.CharField(max_length=10)
pub_date = models.DateTimeField()
body = models.TextField()
def __str__(self):
return self.title
def summary(self):
return self.body[:100]
=> body의 내용을 최대 100자까지만 보여준다.
summary 메소드 추가한 다음
home.html에서 {{ blog.body }} -> {{ blog.summary }}
Path-converter
페이지 하나 만들 때 => urls.py에 path 만들기
함수, html 페이지 만들기.
=> detail 페이지의 경우 DB 내 데이터 개수만큼 페이지가 하나씩 있어야 함.
=> path, 함수 각각 하나씩 다 지정해줘야 함. => 귀찮음
=> 이때, Path-converter 사용
=> id 값만 적어주면 다르게 보여줄 수 있음. views.py에 있는 매개변수로 넘겨줄 수도 있음.
views.py
from django.shortcuts import render, get_object_or_404
from .models import Blog
# Create your views here.
def home(request):
blogs = Blog.objects.all() #Blog 객체를 모두 가져온다. -> Blog 테이블의 모든 row를 가져온다.
return render(request, 'home.html', {'blogs': blogs})
def detail(request, id):
blog = get_object_or_404(Blog, pk=id) #매개변수로 받은 id값이 있는 블로그의 데이터를 가져옴 or 404에러
return render(request, 'detail.html', {'blog': blog})
detail 함수에는 매개변수 하나 더 추가 (id)
django.shortcuts에서 get_object_404 메소드를 import
=> 찾을 수 없는 경우 404 처리.
get_object_404 의 매개변수는 2가지
- models.py에서 받아온 Blog
- pk (Primary Key, 기본 키) (= id)
blog = get_object_or_404(Blog, pk=id)
=> models.py에 있는 Blog를 가져온 것이므로 detail.html에서도 title, writer, pub_date, body 사용 가능.
urls.py
from django.contrib import admin
from django.urls import path
from blog.views import * #blog.views에서 선언한 모든 것을 가져옴
urlpatterns = [
path('admin/', admin.site.urls),
path('', home, name='home'),
path('<int:id>', detail, name='detail'),
]
<int: >
- int : 정수형
- id : views.py 내 detail 함수에서 정한 매개변수의 이름
- name='detail' : 접근할 수 있도록
(<int:id>에서의 id 값 부분 다시 보기!)
path-converter부터 복잡하고 어려움. 주기적으로 다시 봐야 할 듯.
'Django' 카테고리의 다른 글
django | CRUD - Update (0) | 2021.07.07 |
---|---|
django | CRUD - Create (0) | 2021.07.07 |
django | Model & Admin (0) | 2021.07.06 |
django | 기본 틀 정리 (가상환경, 장고 설치, 서버 실행 etc) (0) | 2021.07.06 |
[점프 투 장고] 2-10 질문 등록 기능 만들기 (0) | 2021.07.03 |