edit.html 작성하기
1. views.py에 edit함수 만들기
- (주의할점) 수정할 데이터의 id값을 받아야함. (path converter를 사용해서 id값을 받아온것 처럼...!)
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})
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"),
]
3. detail.html에 edit 연결
<!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>
</body>
</html>
4. edit.html 생성하기
<h1>Update Your Blog</h1>
<form action="" method="post">
{%csrf_token%}
<p>제목 : <input type="text" name="title" value="{{blog.title}}""></p>
<p>작성자 : <input type="text" name="writer" value="{{blog.writer}}""></p>
본문 : <textarea name="body" id="" cols="30" rows="10" >{{blog.body}}</textarea>
<button type="submit">Submit</button>
</form>
5. runserver
update 생성하기 : DB에 적용
1. views.py에 update함수 생성하기
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)
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"),
]
3. edit.html의 action지정
<h1>Update Your Blog</h1>
<!-- blog.id도 같이 넘겨주지 않으면 url.py의 path-converter부분의 형식을 맞춰주지 않았기에 오류가남-->
<form action="{% url 'update' blog.id %}" method="post">
{%csrf_token%}
<p>제목 : <input type="text" name="title" value="{{blog.title}}"></p>
<p>작성자 : <input type="text" name="writer" value="{{blog.writer}}"></p>
본문 : <textarea name="body" id="" cols="30" rows="10" >{{blog.body}}</textarea>
<button type="submit">Submit</button>
</form>
4. runserver
'Back-end > Django' 카테고리의 다른 글
[Django] Template 상속 (0) | 2021.07.19 |
---|---|
[Django] CRUD - Delete (0) | 2021.07.19 |
[Django] CRUD - Create (0) | 2021.07.19 |
[Django] CRUD - Read (0) | 2021.07.19 |
[Django] Model 실습 (0) | 2021.07.19 |
댓글