Meme's IT

[Django] 게시판 만들기 - 수정 본문

BackEnd/Django

[Django] 게시판 만들기 - 수정

Memez 2023. 9. 26. 16:53

https://memezz.tistory.com/23과 이어집니다.

 

수정을 구현하기 위해서 필요한 view함수의 갯수 = 2개

  • 사용자 입력 데이터를 받을 페이지를 렌더링하는 edit함수
  • 사용자가 입력한 데이터를 받아 DB에 저장하는 update함수

# edit함수

1. urls.py에서 경로 추가해주기

from django.urls import path
from . import views

urlpatterns = [
    # 전체 게시글 조회
    path('', views.index, name='index'),
    # 단일 게시글 조회
    path('<int:pk>/', views.detail, name='detail'),
    # 게시글 새로 쓰기
    path('new/',views.new, name='new'),
    path('create/', views.create, name='create'),
    # 지우기
    path('<int:pk>/delete/',views.delete, name='delete'),
    # 수정하기
    path('<int:pk>/edit' , views.edit, name="edit"),
    path('<int:pk>/update/', views.update, name="update")
]

 

 

2. views.pyedit함수 작성해주기

def edit(request,pk):
    article = Article.objects.get(pk=pk)
    context = {
        'article' : article
    }
    return render(request, 'articles/edit.html', context)

pk를 받아와서 각각의 pk에 해당하는 데이터를 수정해줌

 

 

 

3. Templates/articlesedit.html을 추가, 작성해주기

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form action="{% url "update" article.pk %}" method="POST">
        {% csrf_token %}
        <div>
            <label for="title">제목: </label>
            <input type="text" name="title" id="title" value={{article.title}}>
        </div>
        <div>
            <label for="content">내용: </label>
            <textarea name="content" id="content">{{article.content}}</textarea>
        </div>
        <input type="submit" value="수정하기"> 
    </form>
</body>
</html>
  • form의 action에 update를 호출하는 url 태그를 달아주기
  • method는 POST + scrf token추가해주기
  • 수정에는 글을 쓰는 박스에 원래 있던 내용이 써져있어야 하므로, title에는 value로 원래 제목을 넣어주고
  • 본문도 원래 본문을 추가해주는데, textarea는 value를 지원하지 않으므로 tag사이에 넣어주면 된다.

 

# update함수

# views.py

def update(request, pk):
    article= Article.objects.get(pk=pk)
    article.title = request.POST.get('title')
    article.content = request.POST.get('content')
    article.save()		# 저장해주기
    return redirect('detail', article.pk)

redirect로 수정이 완료된 detial 페이지로 넘어가도록 해줌

 

 

# Detail 페이지 수정

detail.html을 수정해서 수정하기 버튼을 추가해준다.

/% detail의 body부분 %/

<h2>Detail</h2>
<h3>{{article.pk}}번째 글</h3>
<hr>
<p>제목: {{article.title}}</p>
<p>내용: {{article.content}}</p>
<hr>
<form action="{% url "delete" article.pk %}" method="POST">
    {% csrf_token %}
    <input type="submit" value="지우기">
</form>
<form action="{% url "edit" article.pk %}" method="POST">
    {% csrf_token %}
    <input type="submit" value="수정하기">
</form>
<a href="{% url "index" %}">뒤로가기</a>

수정하기를 누르면 edit로 넘어감

 

원래의 내용과 함께 수정할 수 있음

 

글을 수정하고 수정하기 버튼을 누르면

수정된 내용과 함께 Detail 페이지로 넘어감

'BackEnd > Django' 카테고리의 다른 글

[Django] Form  (0) 2023.09.27
[Django] HTTP request methods  (0) 2023.09.26
[Django] 게시판 만들기 - 삭제  (0) 2023.09.26
[Django] 게시판 만들기 - 글 작성  (0) 2023.09.26
[Django] 게시판 만들기 - 조회  (0) 2023.09.26