이 주제와 관련된 다른 두 개의 게시물을 읽었지만 내 문제에 대한 해결책을 찾을 수 없었습니다. 편집 내용이 저장된 페이지를 표시하거나 렌더링합니다. "변경 사항 저장"버튼을 클릭하면 양식이 편집이 이루어지기 전의 이전 미리 채워진 인스턴스 상태로 되돌아갑니다.
이것은 Python Crash Course의 연습 19-1입니다.
19-1. 블로그 : Blog 라는 새 Django 프로젝트를 시작합니다. 프로젝트에서 blogs라는 앱과 BlogPost라는 모델을 만듭니다. 모델에는 title, text 및 date_added와 같은 필드가 있어야합니다. 프로젝트의 수퍼 유저를 만들고 관리 사이트를 사용하여 몇 가지 짧은 게시물을 작성합니다. 모든 게시물을 시간순으로 표시하는 홈페이지를 만듭니다. 새 게시물을 만들기위한 양식과 기존 게시물을 편집하기위한 다른 양식을 만듭니다. 양식을 작성하여 제대로 작동하는지 확인하십시오.
models.py :
from django.db import models
class Blog_post(models.Model):
"""A blogpost posted by a User"""
title = models.CharField(max_length=200)
body = models.TextField()
date_added = models.DateTimeField(auto_now_add=True)
def __str__(self):
"""Return a string representation of the model."""
return f"{self.title}\n{self.body}"
forms.py :
from django import forms
from .models import Blog_post
class NewPostForm(forms.ModelForm):
class Meta:
model = Blog_post
fields = ['body', 'title']
labels = {'body': '', 'title': "Title:"}
views.py
from django.shortcuts import render, redirect
from .models import Blog_post
from .forms import NewPostForm
def index(request):
"""The home page for Blog."""
posts = Blog_post.objects.order_by('date_added')
context = {'posts': posts}
return render(request, 'blogs/index.html', context)
def new_post(request):
"""Add a new blogpost."""
if request.method != 'POST':
# No data submitted; create a blank form.
form = NewPostForm()
else:
# POST data submitted; process data.
form = NewPostForm(data=request.POST)
if form.is_valid():
form.save()
return redirect('blogs:index')
context = {'form': form}
return render(request, 'blogs/new_post.html', context)
def edit_post(request, post_id):
"""Edit an existing post."""
post = Blog_post.objects.get(id=post_id)
if request != 'POST':
form = NewPostForm(instance=post)
else:
form = NewPostForm(instance=post, data=request.POST)
if form.is_valid():
form.save()
return redirect('blogs:index', post_id=post.id)
context = {'post': post, 'form': form}
return render(request, 'blogs/edit_post.html', context)
urls.py
from django.urls import path
from . import views
app_name = 'blogs'
urlpatterns = [
# Home page
path('', views.index, name='index'),
# Page for adding a new blogpost
path('new_post/', views.new_post, name='new_post'),
# Page for editing an entry.
path('edit_post/<int:post_id>/', views.edit_post, name='edit_post'),
]
index.html
{% extends "blogs/base.html" %}
{% block content %}
<p> This is the Blog project exercise 19-1 on pg 421 of Python Crash Course.</p>
<p> Blogposts: </p>
<ul>
{% for post in posts %}
<li>
<p>{{ post.date_added|date:'M d, Y H:i' }} - {{ post }} -
<a href="{% url 'blogs:edit_post' post.id %}">Edit Post</a>
</p>
</li>
{% empty %}
<li> No topics have been added yet. </li>
{% endfor %}
</ul>
<a href="{% url 'blogs:new_post' %}">Add a new blogpost.</a>
{% endblock content %}
edit_post.html
{% extends "blogs/base.html" %}
{% block content %}
<p>{{ post }}</p>
<p>Edit post:</p>
<form action="{% url 'blogs:edit_post' post.id %}" method='post'>
{% csrf_token %}
{{ form.as_p }}
<button name="submit">Save changes</button>
</form>
{% endblock content %}
미리 감사드립니다.
문제는 edit_post()
보기 기능 에 있다고 생각합니다 . 다음은 if 블록의 첫 번째 부분입니다.
if request != 'POST':
form = NewPostForm(instance=post)
다음과 같아야한다고 생각합니다.
if request.method != 'POST':
form = NewPostForm(instance=post)
요청 방법이인지 확인합니다 POST
. 의 .method
부분을 중단했습니다 request.method
. 요청 객체 자체는 절대로되지 않으므로이 'POST'
블록은 요청 메서드가 POST 인 경우에도 항상 실행됩니다.
if 블록에서로 변경 request
하면 request.method
게시물을 수정할 수 있다고 믿습니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다