Hi, I observed that you didn't specify the template name attribute for the 
BookListView and BookDetailView, that should solve you problem.

On Tuesday, October 5, 2021 at 10:37:19 PM UTC+2 [email protected] wrote:

> Hello!
> I’m beginner in Django. I do Django Tutorial from Mozilla.
> I get TemplateDoesNotExist at /catalog/books/ . Could you help me?. I 
> don’t understand how to resolve it.
>
> */catalog/urls*
>
> from django.urls import path
>
> from . import views
>
> urlpatterns = [
>
>     path('', views.index, name='index'),
>
>     path('books/', views.BookListView.as_view(), name='books'),
>
>     path('book/<int:pk>', views.BookDetailView.as_view(), 
> name='book-detail'),
>
> ]
>
> *catalog/models*
>
> # Used to generate URLs by reversing the URL patterns
>
> from django.urls import reverse
>
> from django.db import models
>
> from django.urls import reverse
>
> import uuid
>
> # Create your models here
>
> class Genre(models.Model):
>
>     """Model representing a book genre (e.g. Science Fiction, Non 
> Fiction)."""
>
>     name = models.CharField(
>
>         max_length=200,
>
>         help_text="Enter a book genre (e.g. Science Fiction, French Poetry 
> etc.)"
>
>     )
>
>     def __str__(self):
>
>         """String for representing the Model object (in Admin site etc.)"""
>
>         return self.name
>
> class Book(models.Model):
>
>     """Model representing a book (but not a specific copy of a book)."""
>
>     title = models.CharField(max_length=200)
>
>     author = models.ForeignKey('Author', on_delete=models.SET_NULL, 
> null=True)
>
>     # Foreign Key used because book can only have one author, but authors 
> can have multiple books
>
>     # Author as a string rather than object because it hasn't been 
> declared yet in file.
>
>     summary = models.TextField(
>
>         max_length=1000, help_text="Enter a brief description of the book")
>
>     isbn = models.CharField('ISBN', max_length=13,
>
>                             unique=True,
>
>                             help_text='13 Character <a href="
> https://www.isbn-international.org/content/what-isbn'
>
>                                       '">ISBN number</a>')
>
>     genre = models.ManyToManyField(
>
>         Genre, help_text="Select a genre for this book")
>
>     # ManyToManyField used because a genre can contain many books and a 
> Book can cover many genres.
>
>     # Genre class has already been defined so we can specify the object 
> above.
>
>     language = models.ForeignKey(
>
>         'Language', on_delete=models.SET_NULL, null=True)
>
>     class Meta:
>
>         ordering = ['title', 'author']
>
>     def display_genre(self):
>
>         """Creates a string for the Genre. This is required to display 
> genre in Admin."""
>
>         return ', '.join([genre.name for genre in self.genre.all()[:3]])
>
>     display_genre.short_description = 'Genre'
>
>     def get_absolute_url(self):
>
>         """Returns the url to access a particular book instance."""
>
>         return reverse('book-detail', args=[str(self.id)])
>
>     def __str__(self):
>
>         """String for representing the Model object."""
>
>         return self.title
>
> class Language(models.Model):
>
>     name = models.CharField(
>
>         max_length=50, help_text="Enter the book's natural language (e.g. 
> English, French, Japanese etc.)")
>
>     def __str__(self):
>
>         return self.name
>
> class BookInstance(models.Model):
>
>     id = models.UUIDField(primary_key=True, default=uuid.uuid4,
>
>                           help_text="Unique ID for this particular book 
> across whole library")
>
>     book = models.ForeignKey('Book', on_delete=models.SET_NULL, null=True)
>
>     imprint = models.CharField(max_length=200)
>
>     due_back = models.DateField(null=True, blank=True)
>
>     LOAN_STATUS = (
>
>         ('m', 'Maintenance'),
>
>         ('o', 'On loan'),
>
>         ('a', 'Available'),
>
>         ('r', 'Reserved'),
>
>     )
>
>     status = models.CharField(max_length=1, choices=LOAN_STATUS,
>
>                               blank=True, default='m', help_text='Book 
> availability')
>
>     class Meta:
>
>         ordering = ["due_back"]
>
>     def __str__(self):
>
>         """
>
>         String for representing the Model object
>
>         """
>
>         return '%s (%s)' % (self.id, self.book.title)
>
> class Author(models.Model):
>
>     """
>
>     Model representing an author.
>
>     """
>
>     first_name = models.CharField(max_length=100)
>
>     last_name = models.CharField(max_length=100)
>
>     date_of_birth = models.DateField(null=True, blank=True)
>
>     date_of_death = models.DateField('Died', null=True, blank=True)
>
>
>     def get_absolute_url(self):
>
>         """
>
>         Returns the url to access a particular author instance.
>
>         """
>
>         return reverse('author-detail', args=[str(self.id)])
>
>
>     def __str__(self):
>
>         """
>
>         String for representing the Model object.
>
>         """
>
>         return '%s, %s' % (self.last_name, self.first_name)
>
> *catalog/views*
>
> from django.views import generic
>
> from django.shortcuts import render
>
>
> # Create your views here.
>
> from .models import Book, Author, BookInstance, Genre
>
>
>
> def index(request):
>
>     """View function for home page of site."""
>
>
>     # Generate counts of some of the main objects
>
>     num_books = Book.objects.all().count()
>
>     num_instances = BookInstance.objects.all().count()
>
>
>     # Available books (status = 'a')
>
>     num_instances_available = BookInstance.objects.filter(
>
>         status__exact='a').count()
>
>
>     # The 'all()' is implied by default.
>
>     num_authors = Author.objects.count()
>
>
>     context = {
>
>         'num_books': num_books,
>
>         'num_instances': num_instances,
>
>         'num_instances_available': num_instances_available,
>
>         'num_authors': num_authors,
>
>     }
>
>
>     # Render the HTML template index.html with the data in the context 
> variable
>
>     return render(request, 'catalog/index.html', context=context)
>
>
>
> class BookListView(generic.ListView):
>
>     """Generic class-based view for a list of books."""
>
>     model = Book
>
>     paginate_by = 10
>
>
>
> class BookDetailView(generic.DetailView):
>
>     """Generic class-based detail view for a book."""
>
>     model = Book
>
>
> *locallibrary/settings.py*
>
> """
>
> Django settings for locallibrary project.
>
>
> Generated by 'django-admin startproject' using Django 3.2.7.
>
>
> For more information on this file, see
>
> https://docs.djangoproject.com/en/3.2/topics/settings/
>
>
> For the full list of settings and their values, see
>
> https://docs.djangoproject.com/en/3.2/ref/settings/
>
> """
>
>
> import os
>
> from pathlib import Path
>
>
> # Build paths inside the project like this: BASE_DIR / 'subdir'.
>
> BASE_DIR = Path(__file__).resolve().parent.parent
>
>
>
> # Quick-start development settings - unsuitable for production
>
> # See https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/
>
>
> # SECURITY WARNING: keep the secret key used in production secret!
>
> SECRET_KEY = 
> 'django-insecure-k6nhe44hm-a90^cs6**sre$8ajn7u!e735ou4c(1iqk-ga&g!9'
>
>
> # SECURITY WARNING: don't run with debug turned on in production!
>
> DEBUG = os.environ.get('DJANGO_DEBUG', '') != 'False'
>
>
> ALLOWED_HOSTS = []
>
>
>
> # Application definition
>
>
> INSTALLED_APPS = [
>
>     'django.contrib.admin',
>
>     'django.contrib.auth',
>
>     'django.contrib.contenttypes',
>
>     'django.contrib.sessions',
>
>     'django.contrib.messages',
>
>     'django.contrib.staticfiles',
>
>     'catalog.apps.CatalogConfig',
>
> ]
>
>
> MIDDLEWARE = [
>
>     'django.middleware.security.SecurityMiddleware',
>
>     'django.contrib.sessions.middleware.SessionMiddleware',
>
>     'django.middleware.common.CommonMiddleware',
>
>     'django.middleware.csrf.CsrfViewMiddleware',
>
>     'django.contrib.auth.middleware.AuthenticationMiddleware',
>
>     'django.contrib.messages.middleware.MessageMiddleware',
>
>     'django.middleware.clickjacking.XFrameOptionsMiddleware',
>
> ]
>
>
> ROOT_URLCONF = 'locallibrary.urls'
>
>
> TEMPLATES = [
>
>     {
>
>         'BACKEND': 'django.template.backends.django.DjangoTemplates',
>
>         'DIRS': [os.path.join(BASE_DIR, 'templates')],
>
>         'APP_DIRS': True,
>
>         'OPTIONS': {
>
>             'context_processors': [
>
>                 'django.template.context_processors.debug',
>
>                 'django.template.context_processors.request',
>
>                 'django.contrib.auth.context_processors.auth',
>
>                 'django.contrib.messages.context_processors.messages',
>
>             ],
>
>         },
>
>     },
>
> ]
>
>
> WSGI_APPLICATION = 'locallibrary.wsgi.application'
>
>
>
> # Database
>
> # https://docs.djangoproject.com/en/3.2/ref/settings/#databases
>
>
> DATABASES = {
>
>     'default': {
>
>         'ENGINE': 'django.db.backends.sqlite3',
>
>         'NAME': BASE_DIR / 'db.sqlite3',
>
>     }
>
> }
>
>
>
> # Password validation
>
> # 
> https://docs.djangoproject.com/en/3.2/ref/settings/#auth-password-validators
>
>
> AUTH_PASSWORD_VALIDATORS = [
>
>     {
>
>         'NAME': 
> 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
>
>     },
>
>     {
>
>         'NAME': 
> 'django.contrib.auth.password_validation.MinimumLengthValidator',
>
>     },
>
>     {
>
>         'NAME': 
> 'django.contrib.auth.password_validation.CommonPasswordValidator',
>
>     },
>
>     {
>
>         'NAME': 
> 'django.contrib.auth.password_validation.NumericPasswordValidator',
>
>     },
>
> ]
>
>
>
> # Internationalization
>
> # https://docs.djangoproject.com/en/3.2/topics/i18n/
>
>
> LANGUAGE_CODE = 'en-us'
>
>
> TIME_ZONE = 'Europe/London'
>
>
> USE_I18N = True
>
>
> USE_L10N = True
>
>
> USE_TZ = True
>
>
>
> # Static files (CSS, JavaScript, Images)
>
> # https://docs.djangoproject.com/en/3.2/howto/static-files/
>
>
> STATIC_URL = '/static/'
>
>
> # Default primary key field type
>
> # https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field
>
>
> DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
>
>
> *Path templates*
> locallibrary
> -----catalog
> ------ templates
> ------ base_generis.html
> -------book_detail.html
> ----------catalog
> ----------book_list.html
> ----------index.html
>
> *book_list.html*
>
> {% extends "base_generic.html" %}
>
>
> {% block content %}
>
>     <h1>Book List</h1>
>
>
>     {% if book_list %}
>
>     <ul>
>
>
>       {% for book in book_list %}
>
>       <li>
>
>         <a href="{{ book.get_absolute_url }}">{{ book.title }}</a> 
> ({{book.author}})
>
>       </li>
>
>       {% endfor %}
>
>
>     </ul>
>
>     {% else %}
>
>       <p>There are no books in the library.</p>
>
>     {% endif %} 
>
> {% endblock %}
>
> *index.html*
>
> {% extends "base_generic.html" %}
>
>
> {% block title %}
>
> <title>Стартовая страница</title>
>
> {% endblock %}
>
>
> {% block content %}
>
> <h1>Local Library Home</h1>
>
>
> <p>Welcome to <em>LocalLibrary</em>, a very basic Django website developed 
> as a tutorial example on the Mozilla
>
>    Developer Network.</p>
>
>
> <h2>Dynamic content</h2>
>
>
> <p>The library has the following record counts:</p>
>
> <ul>
>
>    <li><strong>Books:</strong> {{ num_books }}</li>
>
>    <li><strong>Copies:</strong> {{ num_instances }}</li>
>
>    <li><strong>Copies available:</strong> {{ num_instances_available 
> }}</li>
>
>    <li><strong>Authors:</strong> {{ num_authors }}</li>
>
> </ul>
>
>
> {% endblock %}
>
> *traceback message*
>
> Environment:
>
> Request Method: GET
> Request URL: http://127.0.0.1:8000/catalog/books/
>
> Django Version: 3.2.7
> Python Version: 3.9.7
> Installed Applications:
> [‘django.contrib.admin’,
> ‘django.contrib.auth’,
> ‘django.contrib.contenttypes’,
> ‘django.contrib.sessions’,
> ‘django.contrib.messages’,
> ‘django.contrib.staticfiles’,
> ‘catalog.apps.CatalogConfig’]
> Installed Middleware:
> [‘django.middleware.security.SecurityMiddleware’,
> ‘django.contrib.sessions.middleware.SessionMiddleware’,
> ‘django.middleware.common.CommonMiddleware’,
> ‘django.middleware.csrf.CsrfViewMiddleware’,
> ‘django.contrib.auth.middleware.AuthenticationMiddleware’,
> ‘django.contrib.messages.middleware.MessageMiddleware’,
> ‘django.middleware.clickjacking.XFrameOptionsMiddleware’]
>
> Template loader postmortem
> Django tried loading these templates, in this order:
>
> Using engine django:
> * django.template.loaders.filesystem.Loader: 
> /Users/nikita/Documents/Github/devsearch/hello-world/locallibrary/templates/catalog/book_list.html
>  
> (Source does not exist)
> * django.template.loaders.app_directories.Loader: 
> /Users/nikita/Documents/Github/devsearch/hello-world/myproject_env/lib/python3.9/site-packages/django/contrib/admin/templates/catalog/book_list.html
>  
> (Source does not exist)
> * django.template.loaders.app_directories.Loader: 
> /Users/nikita/Documents/Github/devsearch/hello-world/myproject_env/lib/python3.9/site-packages/django/contrib/auth/templates/catalog/book_list.html
>  
> (Source does not exist)
> * django.template.loaders.app_directories.Loader: 
> /Users/nikita/Documents/Github/devsearch/hello-world/locallibrary/catalog/templates/catalog/book_list.html
>  
> (Source does not exist)
>
> Traceback (most recent call last):
> File 
> “/Users/nikita/Documents/Github/devsearch/hello-world/myproject_env/lib/python3.9/site-packages/django/core/handlers/exception.py”,
>  
> line 47, in inner
> response = get_response(request)
> File 
> “/Users/nikita/Documents/Github/devsearch/hello-world/myproject_env/lib/python3.9/site-packages/django/core/handlers/base.py”,
>  
> line 204, in _get_response
> response = response.render()
> File 
> “/Users/nikita/Documents/Github/devsearch/hello-world/myproject_env/lib/python3.9/site-packages/django/template/response.py”,
>  
> line 105, in render
> self.content = self.rendered_content
> File 
> “/Users/nikita/Documents/Github/devsearch/hello-world/myproject_env/lib/python3.9/site-packages/django/template/response.py”,
>  
> line 81, in rendered_content
> template = self.resolve_template(self.template_name)
> File 
> “/Users/nikita/Documents/Github/devsearch/hello-world/myproject_env/lib/python3.9/site-packages/django/template/response.py”,
>  
> line 63, in resolve_template
> return select_template(template, using=self.using)
> File 
> “/Users/nikita/Documents/Github/devsearch/hello-world/myproject_env/lib/python3.9/site-packages/django/template/loader.py”,
>  
> line 47, in select_template
> raise TemplateDoesNotExist(’, '.join(template_name_list), chain=chain)
>
> Exception Type: TemplateDoesNotExist at /catalog/books/
> Exception Value: catalog/book_list.html
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/6a60c9e0-a015-4834-89ce-340e22346116n%40googlegroups.com.

Reply via email to