Исключение Django, NoReverseMatch

Я изучаю django на небольшом проекте BlogPost из книги по python'у. Это очень простой проект сам по себе - пользователь может добавить пост с заголовком и текстом.

Я пытаюсь добавить функциональность редактирования существующих записей через функцию views.py под названием "edit_entry" и получаю исключение, которое не могу преодолеть:

NoReverseMatch по адресу /edit_entry/6/ URL-адрес запроса: http://127.0.0.1:8000/edit_entry/6/. Поднято во время выполнения: blogs.views.edit_entry Не найден обратный запрос для 'edit_entry' с аргументами '('',)'. Проверено 1 шаблон(ов): ['edit_entry/(?P<object_id>[0-9]+)/\Z']

Кто-нибудь знает, в чем может быть проблема?

Вот мой код:

models.py

from django.db import models
from django.contrib.auth.models import User

# Create your models here.
class BlogPost(models.Model):
    """Create data model"""
    topic = models.CharField(max_length=100)
    text = models.TextField()
    date_added = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ['-date_added']

    def __str__(self):
        return self.topic

forms.py

from django.forms import ModelForm
from .models import BlogPost

class NewEntryForm(ModelForm):
    class Meta():
        model = BlogPost
        fields = ['topic','text']
        labels = {'topic':'Topic', 'text': 'Text'}

urls.py

from django.urls import path
from . import views

app_name = 'blogs'

urlpatterns = [
    path('', views.index, name='index'),
    path('entries/', views.entries, name='entries'),
    path('new_entry/', views.new_entry, name='new_entry'),
    path('edit_entry/<int:object_id>/', views.edit_entry, name='edit_entry')]

views.py

from django.shortcuts import render, redirect
from django.http import request
from .models import BlogPost
from .forms import NewEntryForm

# Create your views here.
def index(request):
    """Show main page"""

    return render(request, "blogs/index.html")

def entries(request):
    """Shows all entries based on pub. date"""

    object = BlogPost.objects.all()

    context = {'objects': object}
    return render(request,"blogs/entries.html", context)

def new_entry(request):
    """To add new entry"""
    if request.method != 'POST':
        form = NewEntryForm()
    else:
        form = NewEntryForm(data=request.POST)
        if form.is_valid():
            form.save()
            return redirect('blogs:entries')

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

def edit_entry(request, object_id):
    """To edit existed entry"""
    entry = BlogPost.objects.get(id=object_id)

    if request.method != 'POST':
        form = NewEntryForm(instance=entry)
    else:
        form = NewEntryForm(instance=entry, data=request.POST)
        if form.is_valid():
            form.save()
            return redirect('blogs:entries', object_id=object.id)

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

entries.html

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

{% block content %}

    <h3>Your entries:</h3>
    <button name="new_entry"><a href="{% url 'blogs:new_entry' %}">New entry</a></button>

    <ul>
        {% for object in objects %}
        <li>
            <p>Title: {{ object.topic }}</p>
            <p>Date: {{ object.date_added }}</p>
            <p>Text: {{ object.text }}</p>
            <p><a href="{% url 'blogs:edit_entry' object.id %}">Edit</a></p>
        </li>

        {% endfor %}

    </ul>

{% endblock %}

edit_entries.html

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

{% block content %}

<h2> You can edit your entries here</h2>


#<form action="{% url 'blogs:edit_entry' object.id %}" method="post">
#    {% csrf_token %}
#    {{ form.as_p }}
#    <button name="submit">save</button>

</form>

{% endblock %}

введите описание изображения здесь Я не могу понять, в чем проблема. У меня есть гипотеза, что что-то не так в функции edit_entry.

Вернуться на верх