본문 바로가기
Back-end/Django

[Django] CRUD - Delete

by 안녕주 2021. 7. 19.

Delete 구현

1. views.py에서 delete함수 생성하기

from django.shortcuts import render,redirect, get_object_or_404 
from django.utils import timezone #추가
from .models import Blog 

def home(request):
    blogs = Blog.objects.all()
    return render(request, 'home.html', {'blogs' : blogs})

def detail(request, id):  
    blog = get_object_or_404(Blog,pk=id) 
    return render(request, 'detail.html', {'blog' : blog})

def new(request):
    return render(request, 'new.html')

def create(request):
    new_blog = Blog()
    new_blog.title = request.POST['title']
    new_blog.writer = request.POST['writer']
    new_blog.body = request.POST['body']
    new_blog.pub_date = timezone.now()
    new_blog.save() 
    return redirect('detail', new_blog.id) 

def edit(request, id):
    edit_blog = Blog.objects.get(id=id)
    return render(request, 'edit.html', {'blog' : edit_blog})

def update(request,id):
    update_blog = Blog.objects.get(id=id)
    update_blog.title = request.POST['title']
    update_blog.writer = request.POST['writer']
    update_blog.body = request.POST['body']
    update_blog.pub_date = timezone.now()
    update_blog.save() 
    return redirect('detail', update_blog.id) 

def delete(reqeust,id):
    delete_blog = Blog.objects.get(id=id)
    delete_blog.delete()
    return redirect('home')

2. urls.py에 path 생성하기

from django.contrib import admin
from django.urls import path
from blog.views import *  

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', home, name="name"),
    path('<str:id>', detail, name="detail"), 
    path('new/', new, name="new"),
    path('create/', create, name="create"),
    path('edit/<str:id>',edit,name="edit"),
    path('update/<str:id>', update, name="update"),
    path('delete/<str:id>',delete, name="delete"),
]

3. detail.html에서 a태그를 통해 delete 구현

<!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>
    <a href="{% url 'edit' blog.id %}">수정하기</a>
    <a href="{% url 'delete' blog.id %}">삭제하기</a>
</body>
</html>

4. runserver

detail.html

NoReverseMatch에러가 났다....

Reverse for 'home' not found. 'home' is not a valid view function or pattern name.

뭐라나 뭐라나..... 음... 엄..... 코드 상에 문제는 없는데...

view.py에서 문제가 생긴듯하다... 하지만 다시 서버를 돌리면 삭제는 되어 있따...!

 

'Back-end > Django' 카테고리의 다른 글

[Django] Static  (0) 2021.07.19
[Django] Template 상속  (0) 2021.07.19
[Django] CRUD - Update  (0) 2021.07.19
[Django] CRUD - Create  (0) 2021.07.19
[Django] CRUD - Read  (0) 2021.07.19

댓글