Реверс для 'author_details' с аргументами '('',)' не найден. Проверено 1 шаблон(ы): ['author_details/(?P<auth_id>[^/]+)/\\\Z'].

Я новичок в python и в настоящее время разрабатываю практическое приложение, похожее на Goodreads, просто чтобы проверить и бросить вызов самому себе.

Я дошел до той части, где я создал три страницы, одна из которых содержит простой список книг со ссылкой на подробности книги, где есть ссылка на профиль автора.

Ссылка между названием книги и страницей с подробной информацией о книге работает, но когда я нажимаю на ссылку автора на странице с подробной информацией о книге, она выдает ошибку

Reverse for 'author_details' with arguments '('',)' not found. 1 patern(s) tried: ['author_details/(?P<auth_id>[^/]+)/\\Z']

Вот мой код.

views.py

from django.shortcuts import render

from .models import Book
from .models import BookAuthor
from .models import BookGenre





def authors_database(request):
    authors_database = BookAuthor.objects.all()
    return render(request,'authors_database.html',{
            'authors_database':authors_database
        })


def book_details(request,book_id):
    book_details = Book.objects.get(pk=book_id)
    return render(request,'book_details.html',{
            'book_details':book_details
        })


def author_details(self,auth_id):
    author_details = BookAuthor.objects.get(pk=auth_id)
    return render(request,'author_details.html',{
            'author_details':author_details

        })




def index(request):
    return render(request,'index.html',{

        })



def discover_books_list(request):
    discover_books_list = Book.objects.all()
    return render(request,'discover_books_list.html',{
            'discover_books_list':discover_books_list
        })


book_details.html

{% extends 'layout.html' %}

    {% block body %}
        <div class="container">
        <div class="row">
            <div class="col-md-4">
                                {% if  book_details.book_cover_image %}
                   <img src="{{book_details.book_cover_image.url}}" height="480" width="300" class="img-responsive">
                {% endif %}<br>
            </div>
            <div class="col-md-8">
            <h3>{{book_details}}</h3>
            <hr>

     
            <strong>By: </strong><a href="{% url 'author_details' auth.id %}">{{book_details.book_author}}</a>
   

            <br>
            <strong>Publication date:</strong> {{book_details.book_publication_date}}<br>
            <strong>In:</strong> 
            {% for book_genre in book_details.book_genre.all %}
                {{book_genre}}<br><br>
            {% endfor %}
            <strong>About: </strong><br><br>{{book_details.book_description}}<br><br><br>


            <table class="table table-hover">
              ...  <thead>

                  <tbody>
                    <tr>
                      <th scope="row">ISBN:</th>
                      <td>{{book_details.book_ISBN}}</td>
                      <td></td>
                      <td></td>
                    </tr>
                    <tr>
                      <th scope="row">Settings:</th>
                      <td></td>
                      <td></td>
                      <td></td>
                    </tr>
                    <tr>
                      <th scope="row">Characters:</th>
                      <td colspan="2"></td>
                      <td></td>
                      <td></td>
                    </tr>
                  </tbody>
            </table>

<br><br>



            <a href="{{book_details.book_amazon_link}}" class="buy_on_amazon_btn">Buy on Amazon</a>
        </div>
        </div>
    </div>
    {% endblock %}

urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('',views.index,name='index'),
    path('book_details',views.book_details,name='book_details'),
    path('discover_books_list', views.discover_books_list,name='discover_books_list'),

    path('book_details/<book_id>', views.book_details,name='book_details'),

    path('authors_database',views.authors_database,name='authors_database'),

    path('author_details/<auth_id>/',views.author_details,name='author_details'),


]

есть ли что-то, что я делаю неправильно? Все работает до того момента, когда я делаю url в шаблоне.

Проблема здесь:

<a href="{% url 'author_details' auth.id %}">

В вашем представлении вы никогда не передаете auth в качестве контекстной переменной, поэтому auth.id будет None, и поэтому Django не сможет найти подходящий URL.

Не видя ваших моделей (и предполагая, что Book имеет поле внешнего ключа BookAuthor с именем author), вам нужно сделать что-то вроде этого в вашем представлении:

def book_details(request,book_id):
    book_details = Book.objects.get(pk=book_id)
    return render(request,'book_details.html',{
            'book_details':book_details,
            'auth': book_details.author,
    })
Вернуться на верх