Django 博客应用程序不会显示编辑帖子页面

Django blog app won't display edit posts page

目前正在学习 Python Django 速成课程部分,除编辑 post 页面外,我已经掌握了所有内容。我在每个 post 下添加了编辑 post link 但是现在当您尝试查看主页时会显示此错误:

反向 'edit_post',没有找到任何参数。尝试了 1 种模式:['edit_post/(?P<post_id>[0-9]+)/$']

这是我一直在使用的代码。

from django.db import models

# Create your models here.

class BlogPost(models.Model):
    """A topic the user is learning about"""
    title = models.CharField(max_length=200)
    body = models.TextField()
    date_added = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        """A place for the user to create a blog post"""
        return self.title

观看次数

from django.shortcuts import render, redirect

from .models import BlogPost
from .forms import BlogForm

# Create your views here.

def index(request):
    """The home page for Blog"""
    return render(request, 'blogs/index.html')


def blogposts(request):
    """Show all blogposts"""
    blogposts = BlogPost.objects.order_by('date_added') 
    context = {'blogposts': blogposts}
    return render(request, 'blogs/blogposts.html', context)


def new_post(request):
    """Add a new post"""
    if request.method != 'POST':
        # No data submitted, create a blank form
        form = BlogForm()
    else:
        # POST data submitted; process data
        form = BlogForm(data=request.POST)
        if form.is_valid():
            form.save()
            return redirect('blogs:blogposts')

    # Display a blank or invalid form
    context = {'form': form}
    return render(request, 'blogs/new_post.html', context)


def edit_post(request, post_id):

    current_entry = BlogPost.objects.get(id=post_id)
    

    if request.method != 'POST':
        # Initial request; pre-fill form with current entry
        form = BlogForm(instance=current_entry)
    else:
        form = BlogForm(instance=current_entry, data=request.POST)
        if form.is_valid():
            form.save()
            return redirect('blogs:index')

    context = {'post':post, 'form':form}
    return render(request, 'blogs/edit_post.html', context)

网址

"""Defines URL patterns for blogs"""

from django.urls import path

from . import views

app_name = 'blogs'
urlpatterns = [
    # Home page
    path('', views.index, name='index'),
    # Page that shows all topics
    path('blogposts/', views.blogposts, name='blogposts'),
    # Page that displays a single post
    path('new_post/', views.new_post, name='new_post'),
    # Page for editing a post
    path('edit_post/<int:post_id>/', views.edit_post, name='edit_post'),
]

blogposts.html

{% extends "blogs/base.html" %}

{% block content %}

    <p>Blog Posts</p>

    <ul>
        {% for blogpost in blogposts %}
            <h1>{{ blogpost }}</h1>
            <p>{{ blogpost.body }}</p>
            <a href="{% url 'blogs:edit_post' %}">Edit post</a>
        {% empty %}
            <li>No blogs have been posted yet</li>
        {% endfor %}    
    </ul>

    <a href="{% url 'blogs:new_post' %}">Create a new post</a>

{% endblock content %}

edit_post.html

{% extends "blogs/base.html" %}

{% block content %}

    <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 %}

您需要传递要编辑的博客的 ID post。

所以在你的 blogposts.html 中尝试:

"{% url 'blogs:edit_post' blogpost.pk %}"