шаблон не существует Django и Heroku - PullRequest
1 голос
/ 01 августа 2020

Народ, у меня возникла эта проблема, когда я развернул свое приложение в Heroku, когда приложение работает на локальном хосте, все работает хорошо, но на данный момент при развертывании в Heroku он выдает мне эти ошибки, я думаю, это связано с рендерингом шаблонов в играх .snippets, но я проверил все, и вроде все в порядке

Environment:


Request Method: GET
Request URL: https://tienda-videojuegos.herokuapp.com/

Django Version: 3.0.8
Python Version: 3.6.11
Installed Applications:
['games',
 'users',
 'carts',
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'whitenoise.runserver_nostatic',
 'django.contrib.humanize']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'whitenoise.middleware.WhiteNoiseMiddleware',
 '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: /app/templates/games/snippets/search.html  (Source does not exist)
    * django.template.loaders.app_directories.Loader: /app/games/templates/games/snippets/search.html  (Source does not exist)
    * django.template.loaders.app_directories.Loader: /app/carts/templates/games/snippets/search.html  (Source does not exist)
    * django.template.loaders.app_directories.Loader: /app/.heroku/python/lib/python3.6/site-packages/django/contrib/admin/templates/games/snippets/search.html  (Source does not exist)
    * django.template.loaders.app_directories.Loader: /app/.heroku/python/lib/python3.6/site-packages/django/contrib/auth/templates/games/snippets/search.html  (Source does not exist)


Template error:
In template /app/templates/base.html, error at line 0
   games/snippets/search.html 
   1 : {% load static %}
   2 : <!DOCTYPE html>
   3 : <html lang="en">
   4 : <head>
   5 :     <meta charset="UTF-8">
   6 :     <meta name="viewport" content="width=device-width, initial-scale=1.0">
   7 :     <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">
   8 :     <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css" integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous">
   9 :     <link rel="stylesheet" href="{% static 'css/style.css'%}">
   10 :     <title>Play Zone Shop</title>


Traceback (most recent call last):
  File "/app/.heroku/python/lib/python3.6/site-packages/django/template/backends/django.py", line 61, in render
    return self.template.render(context)
  File "/app/.heroku/python/lib/python3.6/site-packages/django/template/base.py", line 171, in render
    return self._render(context)
  File "/app/.heroku/python/lib/python3.6/site-packages/django/template/base.py", line 163, in _render
    return self.nodelist.render(context)
  File "/app/.heroku/python/lib/python3.6/site-packages/django/template/base.py", line 936, in render
    bit = node.render_annotated(context)
  File "/app/.heroku/python/lib/python3.6/site-packages/django/template/base.py", line 903, in render_annotated
    return self.render(context)
  File "/app/.heroku/python/lib/python3.6/site-packages/django/template/loader_tags.py", line 150, in render
    return compiled_parent._render(context)
  File "/app/.heroku/python/lib/python3.6/site-packages/django/template/base.py", line 163, in _render
    return self.nodelist.render(context)
  File "/app/.heroku/python/lib/python3.6/site-packages/django/template/base.py", line 936, in render
    bit = node.render_annotated(context)
  File "/app/.heroku/python/lib/python3.6/site-packages/django/template/base.py", line 903, in render_annotated
    return self.render(context)
  File "/app/.heroku/python/lib/python3.6/site-packages/django/template/loader_tags.py", line 62, in render
    result = block.nodelist.render(context)
  File "/app/.heroku/python/lib/python3.6/site-packages/django/template/base.py", line 936, in render
    bit = node.render_annotated(context)
  File "/app/.heroku/python/lib/python3.6/site-packages/django/template/base.py", line 903, in render_annotated
    return self.render(context)
  File "/app/.heroku/python/lib/python3.6/site-packages/django/template/loader_tags.py", line 176, in render
    template = context.template.engine.get_template(template_name)
  File "/app/.heroku/python/lib/python3.6/site-packages/django/template/engine.py", line 143, in get_template
    template, origin = self.find_template(template_name)
  File "/app/.heroku/python/lib/python3.6/site-packages/django/template/engine.py", line 129, in find_template
    raise TemplateDoesNotExist(name, tried=tried)

The above exception (games/snippets/search.html ) was the direct cause of the following exception:
  File "/app/.heroku/python/lib/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/app/.heroku/python/lib/python3.6/site-packages/django/core/handlers/base.py", line 145, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/app/.heroku/python/lib/python3.6/site-packages/django/core/handlers/base.py", line 143, in _get_response
    response = response.render()
  File "/app/.heroku/python/lib/python3.6/site-packages/django/template/response.py", line 105, in render
    self.content = self.rendered_content
  File "/app/.heroku/python/lib/python3.6/site-packages/django/template/response.py", line 83, in rendered_content
    return template.render(context, self._request)
  File "/app/.heroku/python/lib/python3.6/site-packages/django/template/backends/django.py", line 63, in render
    reraise(exc, self.backend)
  File "/app/.heroku/python/lib/python3.6/site-packages/django/template/backends/django.py", line 84, in reraise
    raise new from exc

Exception Type: TemplateDoesNotExist at /
Exception Value: games/snippets/search.html 

Файлы:

games.views

from django.shortcuts import render
from django.views.generic.detail import DetailView
from django.views.generic.list import ListView
from .models import Game
from django.db.models import Q

# Create your views here.

class GameListView(ListView):
    template_name = 'index.html'
    model = Game

class GameDetailView(DetailView):
    model = Game
    template_name = 'games/game.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)

        print(context)

        return context

class GameSearchListView(ListView):
    template_name = 'games/search.html'
    model = Game.objects.all()

    def get_queryset(self):
        query = self.request.GET.get('q')

        object_list = Game.objects.filter(
            Q(nombre__icontains = query) | Q(precio__icontains = query) | Q(categoria__icontains = query)
        )
        return object_list

games.urls

from django.urls import path
from .views import GameDetailView, GameSearchListView

app_name='juego'

urlpatterns = [

    path('search', GameSearchListView.as_view(), name='search'),
    path('<slug:slug>', GameDetailView.as_view(), name='juego'),
    
]

games.templates.games.snippets

<form action="{% url 'juego:search' %}" method="GET">
    <div class="input-group">
        <input type="text" name="q" id="" class="form-control" placeholder="Buscar" value="{{query}}">
        <div class="input-group-append">
            <input type="submit" value=" Buscar" class="btn btn-primary">
        </div>
    </div>
</form>

playzoneshop.settings

import os

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.0/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'ka7zd+doxl1jv..as.f.d.d

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = ['*']


# Application definition

INSTALLED_APPS = [
    'games',
    'users',
    'carts',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'whitenoise.runserver_nostatic',
    'django.contrib.humanize',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ROOT_URLCONF = 'playzoneshop.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 = 'playzoneshop.wsgi.application'


# Database
# https://docs.djangoproject.com/en/3.0/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}


# Password validation
# https://docs.djangoproject.com/en/3.0/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.0/topics/i18n/

LANGUAGE_CODE = 'es'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.0/howto/static-files/

STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

MEDIA_URL = '/media/'

MEDIA_ROOT = os.path.join(BASE_DIR, "media")
...