Помогите, пожалуйста, решить упражнение 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'),