What To do
1) 글자 수 제한
2) more을 통해 링크 달기
3) 링크 클릭했을 때 detail.html 페이지 내보내기(핵심!)
* 핵심 키워드 pk, path converter, get_object_or_404
1)
models.py에 다음의 함수를 통해 글자 수를 제한한다!
1 2 | def summary(self): return self.body[:100] | cs |
home.html에 가서 위의 정의된 함수 사용
blog.body -> blog.summary로 교체
1 | <p> {{blog.summary}} </p> | cs |
2)
summary 뒤에 <a href="{% url 'detail'%}">...more</a> 추가하기
1 | <p> {{blog.summary}} <a href="{% url 'detail' blog.id%}">...more</a> | cs |
3)
처리 흐름
pk = x 번째 블로그 객체를 요청하면 x번 객체 내용 띄우기
path converter = url 설계 = 사이트/blog/객체번호(x)
get_object_or_404 = 없는 객체를 요청시 404 에러 띄우기!
url 설계는 urls.py에 가서
1 | path('blog/<int:blog_id>', blog,views.detail, name="detail"), | cs |
<> 꺽새 사이에 들어간 것이 컨버터
views.py에 가서
1 2 3 4 5 | from django.shortcuts import render, get_object_or_404 ... def detail(request, blog_id) : # 디테일 view 출력 blog_detail = get_object_or_404(Blog, pk= blog_id) # 특정 객체 가져오기(없으면 404 에러) return render(request, 'detail.html', {'blog':blog_detail}) | cs |
여기서 blog_id를 통해 몇번 객체가 필요한 지를 명시해주어야 함
get_object_or404(어떤 클래스, 검색조건(pk))
pk = primary key 객체들의 이름표, 구분자
그리고 template detail 페이지를 작성해준다
1 2 3 4 5 6 7 8 9 | app/templates/deatail.html <div class="conatiner"> <h1> {{blog.title}} </h1> <p> {{blog.pub_date}} </p> <p> {{blog.body}} </p> <br><br> </div> <a href="{%url 'home'%}">HOME</a> | cs |
이렇게 되면 다음의 블로그가 완성된다
'Web Programming > Django' 카테고리의 다른 글
Portfolio 프로젝트 (Static 파일 처리) (0) | 2019.02.02 |
---|---|
Blog 완성하기 (글 작성하기) (0) | 2019.02.02 |
Model & Admin (0) | 2019.01.21 |
Word Counter 만들기 (0) | 2019.01.17 |
MTV 패턴 (0) | 2019.01.08 |