Реверс для '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,
})