Мне нужна помощь в понимании причины этой ошибки NoReverseMatch
Я думаю, что передаю правильные параметры в ссылку шаблона, поэтому я не знаю, где проверить проблему. Любая помощь и объяснение будут приняты с благодарностью.
Вот код шаблона:
<p>Click here to borrow <a href="{% url 'borrow-book' book_copy.book.id book_copy.copy_num %}">this</a>.</p>
Вот url:
path(
"hub/book/<int:pk>/<uuid:copy_num>",
views.borrow_book,
name="borrow-book",
)
Вот вид:
def borrow_book(request, copy_num):
book_copy = get_object_or_404(
BookCopy, copy_num=copy_num
) # Returns object based on pk and raises 404 if not found
if request.method == "POST":
form = BorrowDateForm(request.POST)
if form.is_valid():
book_copy.borrow_date = form.cleaned_data["borrow_date"]
book_copy.save()
return HttpResponseRedirect(reverse("book-detail"))
else:
proposed_borrow_date = datetime.datetime.today() + datetime.timedelta(days=1)
form = BorrowDateForm(initial={"borrow_date": proposed_borrow_date})
context = {
"form": form,
"book_copy": book_copy,
}
return render(request, "librarianinterface/borrow_date.html", context)
Вот форма:
class BorrowDateForm(forms.Form):
borrow_date = forms.DateTimeField(
help_text="Enter a date two or less days from now.", required=True
) # Period in which they will pick up the book, book will be marked as reserved before pickup
# return_date = borrow_date + datetime.timedelta(days=7)
# They have to return the book within 7 days
def clean_borrow_date(self): # Checks if entered data is valid
data = self.cleaned_data["borrow_date"]
if data < datetime.datetime.today():
raise ValidationError(_("Invalid date - past date or time entered"))
if data > (datetime.datetime.today() + datetime.timedelta(days=2)):
raise ValidationError(
_("Invalid date - you can only reserve books for 2 days")
)
return data # Returns cleaned data
А вот модель:
class BookCopy(models.Model):
"""A model for specific copies of books that will be borrowed from the library."""
copy_num = models.UUIDField(
primary_key=True,
default=uuid.uuid4,
help_text="The unique identification for this book in the whole library.",
)
book = models.ForeignKey("Book", on_delete=models.RESTRICT, null=True)
imprint = models.CharField(
max_length=100, help_text="Enter the name(alias) of the publishing company"
)
due_back = models.DateField(blank=True, null=True)
borrow_date = models.DateField(blank=True, null=True)
possible_statuses = (
("r", "Reserved"),
("a", "Available"),
("b", "Borrowed"),
("w", "Working on it"),
)
status = models.CharField(
max_length=1,
choices=possible_statuses,
blank=True,
null=True,
help_text="Availability status",
)
def __str__(self):
"""Shows how each book copy shall be represented"""
return f"{self.copy_num} ({self.book.title})"
class Meta:
verbose_name_plural = "Book Copies"
А это вывод ошибки
NoReverseMatch at /user/hub/book/3/
Reverse for 'borrow-book' with arguments '('', '')' not found. 1 pattern(s) tried: ['user/hub/book/(?P<pk>[0-9]+)/(?P<copy_num>[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\\Z']
Request Method: GET
Request URL: http://127.0.0.1:8000/user/hub/book/3/
Django Version: 4.0.6
Exception Type: NoReverseMatch
Exception Value:
Reverse for 'borrow-book' with arguments '('', '')' not found. 1 pattern(s) tried: ['user/hub/book/(?P<pk>[0-9]+)/(?P<copy_num>[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\\Z']
Exception Location: C:\Users\DELL\AppData\Local\Programs\Python\Python310\lib\site-packages\django\urls\resolvers.py, line 802, in _reverse_with_prefix
Python Executable: C:\Users\DELL\AppData\Local\Programs\Python\Python310\python.exe
Python Version: 3.10.5
Python Path:
['C:\\Users\\DELL\\Django_projects\\Library\\bookhub\\book_hub',
'C:\\Users\\DELL\\AppData\\Local\\Programs\\Python\\Python310\\python310.zip',
'C:\\Users\\DELL\\AppData\\Local\\Programs\\Python\\Python310\\DLLs',
'C:\\Users\\DELL\\AppData\\Local\\Programs\\Python\\Python310\\lib',
'C:\\Users\\DELL\\AppData\\Local\\Programs\\Python\\Python310',
'C:\\Users\\DELL\\AppData\\Local\\Programs\\Python\\Python310\\lib\\site-packages']
Если необходимы какие-либо другие файлы, пожалуйста, сообщите мне
Оказалось, что я использовал неправильное имя контекста в своем html-шаблоне, поэтому данные не передавались в url