LINUX.ORG.RU

Django2.2: NoReverseMatch или попытка организовать ПОИСК

 ,


0

1

Всем доброго времени суток! Помогите, пожалуйста, устранить ошибку: Reverse for 'book_list_view' not found. 'book_list_view' is not a valid view function or pattern name. при попытке вывести список книг с формой для поиска на странице (http://127.0.0.1:8000 == name='book_list_view'). Без формы в шаблоне все Ok.

Имеется модель:

$ cat models.py 
from django.db import models


class Book(models.Model):
    title = models.CharField(u'Title',  max_length=256)
    abstract = models.CharField(u'Abstract',  max_length=512)

    def get_absolute_url(self):
        return reverse('book:book_detail_view', kwargs={'pk': self.pk})

    class Meta:
        db_table = 'book'

    def __str__(self):
        return u'Book {}'.format(self.title)

Представление у url:

$ cat views.py 
from django.views import generic
from django.db.models import Q

from .models import Book


class BookDetailView(generic.DetailView):
    model = Book
    template_name = 'book/book_detail_view.html'


class BookListView(generic.ListView):
    model = Book
    template_name = 'book/book_list_view.html'
    paginate_by = 10

    def get_queryset(self):
        ft = self.request.GET.get('find_title')
        fa = self.request.GET.get('find_abstract')
        if ft and fa:
            queryset = Book.objects.filter(Q(title__icontains=ft) &
                                           Q(abstract__icontains=fa))
        else:
            queryset = Book.objects.all()
        return queryset



$ cat urls.py 
from django.urls import path

from . import views

app_name = 'book'

urlpatterns = [
    path('', views.BookListView.as_view(), name='book_list_view'),
    path('book/<str:pk>/', views.BookDetailView.as_view(), name='book_detail_view'),
]

Шаблон

{% extends "base.html" %}

{% block title %}The Books{% endblock %}

{% block content %}

<!--- При добавление этой формы возникает ошибка -->
<form action="{% url 'book_list_view' %}" method='GET'>
    <input type="text" name="find_title" />
    <input type="text" name="find_abstract" />
    <button type="submit">Search</button>
</form>


<ul>
{% for item in object_list %}
<li><a href="{% url 'book:book_detail_view' item.pk %}">{{item.title}}</a></li>
{% endfor %}
</ul>

{% if is_paginated %}
   <!--- здесь пагинатор -->
{% endif %}


{% endblock %}