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

    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

    댓글