django 004 | CRUD : Read
1. Read 실습
=> 이전 실습인 blog app 에서부터 시작
1. views.py 수정
def home(request):
blogs=blog.objects.all()
return render(request, 'home.html',{'blogs':blogs})
=> home이라는 함수 넘겨줄 때 블로그에 있던 인자들 모두를 같이 home.html로 render 해줌
- views 손댔으니깐 urls 고쳐주기
(1) app의 views import 해주고
from blog import views
(2) path 추가
path('', views.home, name="home"),
- home.html 수정해주기
(1) 이때 먼저 home.html을 다음과 같이 수정하면 글의 쿼리셋만 나오며 불완전하게 보인다
<body>
<h1>Blog Project</h1>
{% for blog in blogs %}
{{blog}}}
{% endfor %}
</body>
(2) 따라서 (1)보다 조금 더 세세하게 출력해주도록 해야함
<body style="text-align: center;">
<h1>Blog Project</h1>
{% for blog in blogs %}
제목 : {{blog.title}} <br><br>
작성자 : {{blog.writer}} <br><br>
내용 : {{blog.body}} <br><br>
{% endfor %}
</body>
=>
- (+) summary 기능 추가하기
(1) model에 summary 함수 추가
def summary(self):
return self.body[:100] #파이썬 슬래쉬 기능으로 100자까지 잘라주기
(2) home.html 수정
내용 : {{blog.body}}
위의 친구를
내용 : {{blog.summary}}
로 수정
- detail을 볼 수 있는 페이지도 만들어줘야 함
path-converter : 원래 데이터 베이스 요소 하나 당 그에 부합하는 페이지가 존재해야 한다. 근데 일일히 이를 만들고, views 설정, url 연결은 거의 불가능 => path-converter 기능을 통해
(1) view 에 detail 함수 추가
def detail(request, id):
Blog=get_object_or_404(blog, pk=id)
#여기서 두개를 가져올거임 (1)테이블 : (2)pk를 가져오는 것
#pk는 row를 구별해주는 친구
# pk =매개변수를 받은 id
#이는 쿼리셋이 아닌 오브젝트 하나만을 가져옴
return render(request, 'detail.html', {'blog':Blog})
=> blog에서 id값 받아서 이를 pk로 받아주며 구별해주고 돌려줄 때 id에 해당하는 아이를 돌려주는 것
(2) 이 id 값은 url 조정을 해줌으로써 사용자가 id에 따라 다른 결과 보게 해줌, so url 경로 추가
path('<str:id>', views.detail, name="detail" ),
- 데이터 아이디 값에 따라 값이 다르게 나오게 된다
- 두번째 인자는 views의 함수이름
- 마지막은 path 이름
(3) 마지막으로 이 id값은 어디서 얻어오는가?
=> 바로 home.html에서 전달받아오는 것
<div class="container">
<h1>Blog Project</h1>
{% for blog in blogs %}
제목 : {{blog.title}} <br><br>
작성자 : {{blog.writer}} <br><br>
내용 : {{blog.summary}} <a href="{ %url 'detail' blog.id $}")>...more</a>
{% endfor %}
</div>
- a태그를 통해 (<a href="{ %url 'detail' blog.id $}")>...more) detail url을 사용할 때 해당 blog.id 속성도 같이 전달해주는 것
(4) detail.html 수정
<body>
<h1>{{blog.title}}</h1>
{{blog.writer}}<br><br>
{{blog.pub_date}}
<br>
{{blog.body}}
</body>
결과물 :
(+) 디버깅
views.py에서 처음에 아래와 같이 썼었음
def detail(request, id):
blog=get_object_or_404(blog, pk=id)
return render(request, 'detail.html', {'blog':Blog})
blog=get_object_or_404(blog, pk=id)
이 문장에서 뒤에 나오는 blog와 앞의 blog가 same해서 충돌 오류 났던 것
그래서 앞에 변수명을 Blog로 바꿨다
Author And Source
이 문제에 관하여(django 004 | CRUD : Read), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@myway00/django-004-CRUD-Create저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)