Мне нужна помощь в понимании причины этой ошибки 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

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