본문 바로가기

Web Programming/Django

Home & Detail (Blog 모델 상세 페이지)

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