Помогите, пожалуйста, решить упражнение 19.1 из книги Python-Crash-Course.-Eric-Mattes

Когда я пытаюсь отредактировать сообщение, я вижу эту ошибку: TypeError at /edit_post/ edit_post() missing 1 required positional argument: 'post_id'

>

blogs/models.py

from django.db import models

# Create your models here.

class BlogPost(models.Model):
    """Creating blog topics and text"""
    title = models.CharField(max_length=200)
    text = models.TextField()
    date_added = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        """Retunrning title"""
        return self.title

    def __str__(self):
        """retunrning text"""
        return self.text

blogs/views.py

from django.shortcuts import render, redirect
from .models import BlogPost
from .forms import PostForm

# Create your views here.
def index(request):
    """Homepage for blogs"""
    return render(request, 'blogs/index.html')

def posts(request):
    """Shows the blogposts list"""
    posts = BlogPost.objects.order_by('-date_added')
    context = {'posts': posts}
    return render(request, 'blogs/posts.html', context)

def new_post(request):
    """Creating new topic"""
    if request.method != 'POST':
        #Data didn't sent; create empty form
        form = PostForm()
    else:
        # Data sent POST; process data
        form = PostForm(data=request.POST)
        if form.is_valid():
            form.save()
            return redirect('blogs:posts')

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

def edit_post(request, post_id):
    """Edit post"""
    post = BlogPost.objects.get(id=post_id)
    if request.method != 'POST':
        # Request; form is filled with the data from current post
        form = PostForm(instance=post)

    else:
        # Sending POST data; process data
        form = EntryForm(instance=post, data=request.POST)
        if form.is_valid():
            form.save()
            return redirect(request, 'blogs:posts')

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

blogs/urls.py

from django.urls import path
from .import views

app_name = 'blogs'
urlpatterns = [
    # Homepage
    path('', views.index, name='index'),
    # Posts
    path('posts/', views.posts, name='posts'),
    # # View a single post
    # path('posts/<int:post_id>/', views.post, name="post"),
    # Creating new post
    path('new_post/', views.new_post, name='new_post'),
    # Edit post
    path('edit_post/', views.edit_post, name='edit_post'),

blog/blogs/templates/blogs/base.html

<p>
    <a href= "{% url 'blogs:index' %}">Blog</a> -
    <a href= "{% url 'blogs:posts' %}">Posts</a> 
</p>


{% block content %}{% endblock content %}
blog/blogs/templates/blogs/posts.html
{% extends "blogs/base.html" %}

{% block content %}

<p>Blogposts</p>
<ul>
    {% for post in posts %}
      <li>
        <a href="{% url 'blogs:posts' %}">{{ post }}</a>-
        <a href="{% url 'blogs:edit_post' %}">Edit post</a>
      </li>
<!--       <li>{{ post }}</li>
 -->    {% empty %}
      <li>No posts have been created yet</li>
    {% endfor %}
</ul>

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


{% endblock content %}

blog/blogs/templates/blogs/new_post.html

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

{% block content %}

  <p>Add a new post:</p>

  <form action="{% url 'blogs:new_post' %}" method='post'>
    {% csrf_token %}
    {{ form.as_p }}
    <button name="submit">add post</button>
  </form>


{% endblock content %}

blog/blogs/templates/blogs/edit_post.html

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

{% block content %}

  <p><a href="{% url 'blogs:post' %}">{{ post }}</a></p>


<p>Edit post</p>

<form action="{% url 'blogs:edit_post' post.id %}"method='post'>
    {% csrf_token %}
    {{ form.as_p }}
    <button name="submit">edit post</button>
</form>


{% endblock content %}

Я думаю, что вам нужен id поста в вашем url, чтобы знать, какой пост редактировать. Попробуйте сделать это в вашем urls.py:

    # Edit post
    path('edit_post/<post_id>', views.edit_post, name='edit_post'),

Я думаю, что вам нужен id поста в вашем url, чтобы знать, какой пост редактировать. Попробуйте сделать это в вашем urls.py:

    # Edit post
    path('edit_post/<post_id>', views.edit_post, name='edit_post'),
Вернуться на верх