CRUD란 Create, Read, Update, Delete의 줄임말이다.
1. blogapp에 template폴더를 만들고 home.html를 생성한다.
2. views.py에서 home함수 생성
from django.shortcuts import render
from .models import Blog #blog 데이터를 가져오기위해
def home(request):
blogs = Blog.objects.all() #blog table의 객체들을 전체다 가져온다
return render(request, 'home.html', {'blogs' : blogs}) # blogs 변수를 home.html과 함께 보낸다.
3. urls.py에 path 추가
from django.contrib import admin
from django.urls import path
from blog.views import * #blog 앱의 views.py의 모든 함수를 가져온다.
urlpatterns = [
path('admin/', admin.site.urls),
path('', home, name="name"),
]
4. home.html 작성
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initia-scale=1.0">
<title>BLOG</title>
</head>
<body>
<h1>Blog Project</h1>
{%for blog in blogs %} <!--객체 하나하나 for문으로 확인-->
{{blog}} <!--제목만 뜸-->
{% endfor %}
</body>
</html>
5. 객체의 제목이 아니라 내부의 column을 보고 싶다면..?
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initia-scale=1.0">
<title>BLOG</title>
<style>
body{text-align: center;}
</style>
</head>
<body>
<h1>Blog Project</h1>
<div class="container">
{%for blog in blogs %} <!--객체 하나하나 for문으로 확인-->
<div>
<h3>{{blog.title}} </h3>
{{blog.writer}}
{{blog.body}}
<br>
</div>
{% endfor %}
</div>
</body>
</html>
6. 본문내용은 보이지 않게 하기위해 긴 body를 가진 object를 추가하자.
7. models.py에 summary 함수를 생성해서 본문을 잘라서 보이도록 해주자
from django.db import models
#table의 형식 만들기
class Blog(models.Model):
title = models.CharField(max_length=200)
writer = models.CharField(max_length=100)
pub_date = models.DateTimeField()
body = models.TextField()
def __str__(self):
return self.title
def summary(self):
return self.body[:100] #100인덱스까지 슬라이싱
8. home.html의 {{blog.body}} 를 {{blog.summary}}로 변경하자
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initia-scale=1.0">
<title>BLOG</title>
<style>
body{text-align: center;}
</style>
</head>
<body>
<h1>Blog Project</h1>
<div class="container">
{%for blog in blogs %} <!--객체 하나하나 for문으로 확인-->
<div>
<h3>{{blog.title}} </h3>
{{blog.writer}}
<!--{{blog.body}}-->
{{blog.summary}}
<br>
</div>
{% endfor %}
</div>
</body>
</html>
Detail 페이지 생성하기
Path-converter : detail 페이지는 DB의 개수마다 페이지가 하나씩 있어야한다. 따라서 path는 계속해서 늘어난다. url로 path값을 적어주면 ID값을 통해 페이지가 다르게 보인다.
1. templates/detail.html을 만들어준다.
2. views.py에 함수를 만든다.
from django.shortcuts import render, get_object_or_404
from .models import Blog
def home(request):
blogs = Blog.objects.all()
return render(request, 'home.html', {'blogs' : blogs})
def detail(request, id): #매개변수를 하나더 받는다 # 404에러를 뜨게 하거나 blog를 띄우거나
blog = get_object_or_404(Blog,pk=id) #pk는 기본키, 관계형 DB에서 식별자를 뜻한다.
return render(request, 'detail.html', {'blog' : blog})
3. urls.py 에 path-converter 생성
- path-converter를 통해 detail함수의 매개변수로 id를 전달해주고... table에서 객체를 찾고...datail페이지에 DB를 전달
from django.contrib import admin
from django.urls import path
from blog.views import * #blog 앱의 views.py의 모든 함수를 가져온다.
urlpatterns = [
path('admin/', admin.site.urls),
path('', home, name="name"),
path('<str: id>', detail, name="detail") # <자료형 : id(매개변수의 이름)> , 함수이름, 접근을 할 수 있는 name
#path-converter : 다른 페이지로 이동을 할 때, DB의 아이디 값에 따라 페이지가 다르게 보인다.
]
4. home.html에 detail.html 연결하기
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initia-scale=1.0">
<title>BLOG</title>
<style>
body{text-align: center;}
</style>
</head>
<body>
<h1>Blog Project</h1>
<div class="container">
{%for blog in blogs %}
<div>
<h3>{{blog.title}} </h3>
{{blog.id}}
{{blog.writer}}
{{blog.summary}} <a href="{% url 'detail' blog.id %}"> ...more </a> <!--detail이라는 url에 요청을 보내는데, blog.id도 같이 보낸다.-->
<br>
</div>
{% endfor %}
</div>
</body>
</html>
5. detail.html 만들기
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Detail</title>
<style>
body{text-align: center;}
</style>
</head>
<body>
<h1>{{blog.title}}</h1> <br>
{{blog.writer}} <br>
{{blog.pub_date}} <br>
{{blog.body}} <br>
</body>
</html>
6. runserver를 통해 확인해보자
python manage.py runserver
'Back-end > Django' 카테고리의 다른 글
[Django] CRUD - Update (0) | 2021.07.19 |
---|---|
[Django] CRUD - Create (0) | 2021.07.19 |
[Django] Model 실습 (0) | 2021.07.19 |
[Django] Django와 데이터베이스 (0) | 2021.07.19 |
[Django] Git 사용법 (0) | 2021.07.19 |
댓글