Исключение 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.