Okay, I also noticed something in the TEMPLATES VARIABLE in your settings.py file, please make DIRS an empty list like this [] with no space or better still change to [os.path.join(BASE_DIR, 'catalog/templates')]
On Wednesday, October 6, 2021 at 5:00:42 PM UTC+2 [email protected] wrote: > Thank you! > I corrected as you wrote. But I also have this mistake ( > TemplateDoesNotExist at /catalog/books/ > catalog/book_list.html, catalog/book_list.html). > Might I take the wrong path? (my path is below picture) > Also thank you for helping me. I am grateful to you. I have had this > problem for 1 week. > [image: image.png] > > > ср, 6 окт. 2021 г. в 16:19, Adeyemi Deji <[email protected]>: > >> correct paginated_by to paginate_by. >> >> >> <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail&utm_term=icon> >> Virus-free. >> www.avast.com >> <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail&utm_term=link> >> >> <#m_-4865023885270008228_m_2700252164806904525_m_-6914425398611891894_DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2> >> >> On Wed, Oct 6, 2021 at 3:17 PM Adeyemi Deji <[email protected]> wrote: >> >>> Please correct your class views, you are getting it wrong. >>> it should look like this. >>> >>> class BookListView(generic.ListView): >>> model = Book >>> paginated_by = 10 >>> template_name = "catalog/book_list.html" >>> >>> class BookDetailView(generic.DetailView): >>> model = Book >>> template_name = "catalog/book_detail.html" >>> >>> >>> <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail&utm_term=icon> >>> Virus-free. >>> www.avast.com >>> <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail&utm_term=link> >>> >>> <#m_-4865023885270008228_m_2700252164806904525_m_-6914425398611891894_m_1024950781820118978_DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2> >>> >>> On Wed, Oct 6, 2021 at 3:09 PM Никита Назаров <[email protected]> >>> wrote: >>> >>>> It also doesn't work. I see this error :"TemplateDoesNotExist at >>>> /catalog/books/ catalog/book_list.html, catalog/book_list.html" >>>> My views.py is below. >>>> Also, I checked on GitHub Mozilla ( >>>> https://github.com/mdn/django-locallibrary-tutorial/blob/master/catalog/views.py). >>>> >>>> They didn't use - template_name. >>>> I'm completely confused. >>>> >>>> from .models import Book, Author, BookInstance, Genre >>>> from django.views import generic >>>> from django.shortcuts import render >>>> from django.views.generic.base import TemplateView >>>> >>>> # Create your views here. >>>> >>>> >>>> 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, 'index.html', context=context) >>>> >>>> >>>> class BookListView(generic.ListView): >>>> >>>> """Generic class-based view for a list of books.""" >>>> >>>> model = Book >>>> paginate_by = 10 >>>> template_name = "catalog/book_list.html" >>>> >>>> >>>> class BookDetailView(generic.DetailView): >>>> >>>> """Generic class-based detail view for a book.""" >>>> model = Book >>>> template_name = "catalog/book_detail.html" >>>> >>>> >>>> >>>> ср, 6 окт. 2021 г. в 14:24, Adeyemi Deji <[email protected]>: >>>> >>>>> class BookListView(generic.ListView): >>>>> >>>>> """Generic class-based view for a list of books.""" >>>>> >>>>> model = Book >>>>> >>>>> paginate_by = 10 >>>>> >>>>> template_name = "catalog/book_list.html" >>>>> >>>>> >>>>> <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail&utm_term=icon> >>>>> Virus-free. >>>>> www.avast.com >>>>> <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail&utm_term=link> >>>>> >>>>> <#m_-4865023885270008228_m_2700252164806904525_m_-6914425398611891894_m_1024950781820118978_m_8455319138707163929_m_3791702616293114032_DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2> >>>>> >>>>> On Wed, Oct 6, 2021 at 1:21 PM Adeyemi Deji <[email protected]> >>>>> wrote: >>>>> >>>>>> Please don't change your formal code setting, just add the >>>>>> template_name attribute and specify the template you are referring to >>>>>> just add this to your former code: >>>>>> template_name = "catalog/book_list.html" >>>>>> >>>>>> >>>>>> <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail&utm_term=icon> >>>>>> Virus-free. >>>>>> www.avast.com >>>>>> <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail&utm_term=link> >>>>>> >>>>>> <#m_-4865023885270008228_m_2700252164806904525_m_-6914425398611891894_m_1024950781820118978_m_8455319138707163929_m_3791702616293114032_m_2104138296797754165_DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2> >>>>>> >>>>>> On Wed, Oct 6, 2021 at 1:09 PM Никита Назаров <[email protected]> >>>>>> wrote: >>>>>> >>>>>>> It doesn't seem to work. I wrote your example in views.py. >>>>>>> Or I might make mistakes. Could you see? >>>>>>> >>>>>>> views. py >>>>>>> from .models import Book, Author, BookInstance, Genre >>>>>>> from django.views import generic >>>>>>> from django.shortcuts import render >>>>>>> from django.views.generic.base import TemplateView >>>>>>> >>>>>>> # Create your views here. >>>>>>> >>>>>>> >>>>>>> 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(TemplateView): >>>>>>> template_name = "catalog/book_list.html" >>>>>>> >>>>>>> >>>>>>> class BookDetailView(TemplateView): >>>>>>> template_name = "catalog/book_detail.html" >>>>>>> >>>>>>> >>>>>>> urls.py >>>>>>> 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'), >>>>>>> ] >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> ср, 6 окт. 2021 г. в 12:45, Adeyemi Deji <[email protected]>: >>>>>>> >>>>>>>> for example. >>>>>>>> >>>>>>>> class AboutView(TemplateView): >>>>>>>> template_name = "about.html" >>>>>>>> >>>>>>>> >>>>>>>> On Wed, Oct 6, 2021 at 11:32 AM Никита Назаров <[email protected]> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> Hello! >>>>>>>>> Thank you! >>>>>>>>> I'm sorry. How could I do this? >>>>>>>>> >>>>>>>>> среда, 6 октября 2021 г. в 11:20:19 UTC+3, [email protected]: >>>>>>>>> >>>>>>>>>> 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/17c51485-19f7-4693-aa4d-1e69e9a7ddd8n%40googlegroups.com >>>>>>>>> >>>>>>>>> <https://groups.google.com/d/msgid/django-users/17c51485-19f7-4693-aa4d-1e69e9a7ddd8n%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>>>>>> . >>>>>>>>> >>>>>>>> -- >>>>>>>> You received this message because you are subscribed to a topic in >>>>>>>> the Google Groups "Django users" group. >>>>>>>> To unsubscribe from this topic, visit >>>>>>>> https://groups.google.com/d/topic/django-users/8R6KRoYcHM0/unsubscribe >>>>>>>> . >>>>>>>> To unsubscribe from this group and all its topics, send an email to >>>>>>>> [email protected]. >>>>>>>> To view this discussion on the web visit >>>>>>>> https://groups.google.com/d/msgid/django-users/CAEO1GrrcCMRPuhkE_4xN8WJkRdf7LTYCbFNxSP4jfwK3Gq2QWQ%40mail.gmail.com >>>>>>>> >>>>>>>> <https://groups.google.com/d/msgid/django-users/CAEO1GrrcCMRPuhkE_4xN8WJkRdf7LTYCbFNxSP4jfwK3Gq2QWQ%40mail.gmail.com?utm_medium=email&utm_source=footer> >>>>>>>> . >>>>>>>> >>>>>>> -- >>>>>>> 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/CAHynOmyfD4VbUiT-CDV-8mM8x5hk1B7FAcfVF3bGHAuLtx0vhQ%40mail.gmail.com >>>>>>> >>>>>>> <https://groups.google.com/d/msgid/django-users/CAHynOmyfD4VbUiT-CDV-8mM8x5hk1B7FAcfVF3bGHAuLtx0vhQ%40mail.gmail.com?utm_medium=email&utm_source=footer> >>>>>>> . >>>>>>> >>>>>> >>>>>> >>>>>> <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail&utm_term=icon> >>>>>> Virus-free. >>>>>> www.avast.com >>>>>> <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail&utm_term=link> >>>>>> >>>>>> <#m_-4865023885270008228_m_2700252164806904525_m_-6914425398611891894_m_1024950781820118978_m_8455319138707163929_m_3791702616293114032_m_2104138296797754165_DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2> >>>>>> >>>>> -- >>>>> You received this message because you are subscribed to a topic in the >>>>> Google Groups "Django users" group. >>>>> To unsubscribe from this topic, visit >>>>> https://groups.google.com/d/topic/django-users/8R6KRoYcHM0/unsubscribe >>>>> . >>>>> To unsubscribe from this group and all its topics, send an email to >>>>> [email protected]. >>>>> To view this discussion on the web visit >>>>> https://groups.google.com/d/msgid/django-users/CAEO1Grq_aBWNFaKKjLXoDMYw4vK27auQZH4OxZtdzAHfEgSuhw%40mail.gmail.com >>>>> >>>>> <https://groups.google.com/d/msgid/django-users/CAEO1Grq_aBWNFaKKjLXoDMYw4vK27auQZH4OxZtdzAHfEgSuhw%40mail.gmail.com?utm_medium=email&utm_source=footer> >>>>> . >>>>> >>>> -- >>>> 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/CAHynOmyZ%3DM24bviLxHQ34ZtTGb_OQ%3DyXS5agTLXaDLXcXCWyMA%40mail.gmail.com >>>> >>>> <https://groups.google.com/d/msgid/django-users/CAHynOmyZ%3DM24bviLxHQ34ZtTGb_OQ%3DyXS5agTLXaDLXcXCWyMA%40mail.gmail.com?utm_medium=email&utm_source=footer> >>>> . >>>> >>> -- >> You received this message because you are subscribed to a topic in the >> Google Groups "Django users" group. >> To unsubscribe from this topic, visit >> https://groups.google.com/d/topic/django-users/8R6KRoYcHM0/unsubscribe. >> To unsubscribe from this group and all its topics, send an email to >> [email protected]. >> > To view this discussion on the web visit >> https://groups.google.com/d/msgid/django-users/CAEO1GrpjN9exwV62_2S9y-tB0JLeLo%3DugfcX-_%3DH_C%3DfqotTSg%40mail.gmail.com >> >> <https://groups.google.com/d/msgid/django-users/CAEO1GrpjN9exwV62_2S9y-tB0JLeLo%3DugfcX-_%3DH_C%3DfqotTSg%40mail.gmail.com?utm_medium=email&utm_source=footer> >> . >> > -- 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/e584e4e0-c4b5-456a-a42f-bde526ac6c9en%40googlegroups.com.

