Получена ошибка “Страница не найдена (404) Ни один товар не соответствует данному запросу.”

Вопрос или проблема

Я начал получать эту ошибку после того, как удалил все свои товары из базы данных (я сделал это, потому что это были фиктивные данные только для тестирования). Когда я запускаю сервер и иду на localhost, я вижу эту ошибку

Ошибка указывает на то, что эта проблема возникла в “home.views.index”, несмотря на то, что товары не вызываются на главной странице. Мне кажется, что мое приложение ищет товары и падает, когда не может их найти.

Вот код моего приложения urls.py

from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
     path('', include('home.urls')),
     path('admin/', admin.site.urls),
     path('products/', include('products.urls')),
     path('checkout/', include('checkout.urls')),
     path('bag/', include('bag.urls')),
     path('contact/', include('contact.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Вот мой product/urls.py

from django.urls import path
from . import views
urlpatterns = [
     path('', views.all_products, name="products"),
     path('<int:product_id>/', views.product_detail, name="product_detail"),
]

Вот код products/views.py

from django.shortcuts import render
from .models import Product
def all_products(request):
    products = Product.objects.all()

    context = {
         'products': products,
 }

return render(request, "products/products.html", context )

def product_detail(request, product_id):
     product = get_object_or_404(Product, pk=product_id)

     context = {
        'product': product,
    }

return render(request, 'products/product_detail.html', context)

Вот код home/urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name="home")
]

Вот код home/views.py

from django.shortcuts import render

def index(request):
    return render(request, 'home/index.html')

Вот index.html

{% extends "base.html" %}
{% load static %}

{% block content %}
    <body class="front bg-pattern-dark">
        <div class="body">
            <div role="main" class="main">
                <section class="highlight-shop grid-pro">
                    <div class="container">
                        <div class="row">
                            <div class="col-xs-6 col-sm-4">
                                <div class="cat-thumb-item cat-thumb-item-grid">
                                    <img alt="Осень / Зима 2014" src="https://stackoverflow.com/questions/79040689/{% static"/images/adustable-dumbell.jpg' %}" class="img-responsive">
                                    <div class="cat-caption bg-color7">
                                        <h3><a href="#">Рубашки с длинным рукавом</a></h3>
                                        <p><a href="#">Купить сейчас</a></p>
                                    </div>  
                                </div>
                            </div>
                            <div class="col-xs-6 col-sm-4">
                                <div class="cat-thumb-item cat-thumb-item-grid">
                                    <img alt="Осень / Зима 2014" src="https://stackoverflow.com/questions/79040689/{% static"/images/Bar.jpg' %}" class="img-responsive">
                                    <div class="cat-caption bg-color7">
                                        <h3><a href="#">Джинсы</a></h3>
                                        <p><a href="#">Купить сейчас</a></p>
                                    </div>  
                                </div>
                            </div>
                            <div class="col-xs-6 col-sm-4">
                                <div class="cat-thumb-item cat-thumb-item-grid">
                                    <img alt="Осень / Зима 2014" src="https://stackoverflow.com/questions/79040689/{% static"/images/Bench.jpg' %}" class="img-responsive">
                                    <div class="cat-caption bg-color7">
                                        <h3><a href="#">Рубашки</a></h3>
                                        <p><a href="#">Купить сейчас</a></p>
                                    </div>  
                                </div>
                            </div>
                            <div class="col-xs-6 col-sm-4">
                                <div class="cat-thumb-item cat-thumb-item-grid">
                                    <img alt="Осень / Зима 2014" src="https://stackoverflow.com/questions/79040689/{% static"/images/Bumper-plate.jpg' %}" class="img-responsive">
                                    <div class="cat-caption bg-color7">
                                        <h3><a href="#">Сумки</a></h3>
                                        <p><a href="#">Купить сейчас</a></p>
                                    </div>  
                                </div>
                            </div>
                            <div class="col-xs-6 col-sm-4">
                                <div class="cat-thumb-item cat-thumb-item-grid">
                                    <img alt="Осень / Зима 2014" src="https://stackoverflow.com/questions/79040689/{% static"/images/Mat.jpg' %}" class="img-responsive">
                                    <div class="cat-caption bg-color7">
                                        <h3><a href="#">Часы</a></h3>
                                        <p><a href="#">Купить сейчас</a></p>
                                    </div>  
                                </div>
                            </div>
                            <div class="col-xs-6 col-sm-4">
                                <div class="cat-thumb-item cat-thumb-item-grid">
                                    <img alt="Осень / Зима 2014" src="https://stackoverflow.com/questions/79040689/{% static"/images/Rack.jpg' %}" class="img-responsive">
                                    <div class="cat-caption bg-color7">
                                        <h3><a href="#">Аксессуары</a></h3>
                                        <p><a href="#">Купить сейчас</a></p>
                                    </div>  
                                </div>
                            </div>
                        </div>
                    </div>
                </section>
            </div>
        </div>
    </body>
</html>
{% endblock %}

Вот base.html

{% load static %}
<!DOCTYPE html>
<html>
    <head>

        <!-- Базовые метаданные -->
        <meta charset="utf-8">
        <title>AlfaRyse</title>     
        <meta name="keywords" content="HTML5 Template" />
        <meta name="description" content="AlfaRyse">
        <meta name="author" content="pixelgeeklab.com">
    <base href="https://stackoverflow.com/questions/79040689/{% static"https://stackoverflow.com/" %}">

        <!-- Мобильные метаданные -->
        <meta name="viewport" content="width=device-width, initial-scale=1.0">

        <!-- Шрифты для веба  -->
        <link href="http://fonts.googleapis.com/css?family=Dosis:300,400,500,600,700" rel="stylesheet" type="text/css">

        <!-- CSS для поставщиков -->
        <link rel="stylesheet" href="vendor/fontawesome/css/font-awesome.css">
        <link rel="stylesheet" href="vendor/owlcarousel/owl.carousel.css" media="screen">
        <link rel="stylesheet" href="vendor/owlcarousel/owl.theme.css" media="screen">
        <link href="vendor/owl-carousel/owl.transitions.css" rel="stylesheet" media="screen">
        <link rel="stylesheet" href="vendor/flexslider/flexslider.css" media="screen">
        <link rel="stylesheet" href="vendor/chosen/chosen.css" media="screen">
        <link rel="stylesheet" href="vendor/magnific-popup/magnific-popup.css" media="screen">

        <!-- CSS темы -->
        <link rel="stylesheet" href="css/theme.css">
        <link rel="stylesheet" href="css/theme-animate.css">
        
        <!-- Переключатель стилей-->
        <link href="css/colors/default/style.css" rel="stylesheet" id="layoutstyle">

        <!-- Библиотеки заголовков -->
        <script src="vendor/modernizr/modernizr.js"></script>

        <!--[if IE]>
            <link rel="stylesheet" href="css/ie.css">
        <![endif]-->

        <!--[if lte IE 8]>
            <script src="vendor/respond/respond.js"></script>
            <script src="vendor/excanvas/excanvas.js"></script>
        <![endif]-->

    </head>
  <header id="header">
    <div class="header-top">
      <div class="container row">
        <a href="#offcanvas" class="uk-navbar-toggle hidden-lg" data-uk-offcanvas>
          <span class="sr-only">Переключить навигацию</span>
          <i class="fa fa-bars"></i>
        </a>
        <div class="col-md-4">
          <a href="{% url 'home' %}">
            <img class="img-responsive" src="https://stackoverflow.com/questions/79040689/{% static"/images/AlfaRyse Logo.png' %}" alt="">
          </a>
        </div>
        <nav>
          <ul class="nav nav-pills nav-top nav-top-right">
            <li class="shopping-cart">
              <a href="#offcanvas-cart" data-uk-offcanvas><i class="fa fa-shopping-cart"></i> <span><span>{% if total %}
                ${{ total|floatformat:2 }}
            {% else %}
                $0.00
            {% endif %}</span></span></a>
            </li>
          </ul>
        </nav>
        <div class="navbar-collapse nav-main-collapse collapse">
          <nav class="nav-main">
            <ul class="nav nav-pills nav-main-menu">
              <li class="dropdown active">
                <a href="{% url 'home' %}" class="dropdown-toggle">Главная</a>
              </li>
              <li class="dropdown active">
                <a href="{% url 'products' %}" class="dropdown-toggle">Товары</a>
              </li>
              <li class="dropdown active">
                <a href="{% url 'contact' %}" class="dropdown-toggle">Связаться с нами</a>
              </li>
            </ul>
          </nav>
        </div>  
      </div>    
    </div>
  </header>
  <main>
    {% block content %}
    {% endblock %}
    <div id="offcanvas" class="uk-offcanvas">
      <div class="uk-offcanvas-bar">
        <ul id="main-menu-offcanvas" class="uk-nav-offcanvas">
          <li class="uk-parent uk-active">
            <a href="#">Главная</a>
          </li>
          <li class="uk-parent">
            <a href="#">Товары</a>
          </li>
          <li class="uk-parent">
            <a href="contact.html">Связаться с нами</a>
          </li>
        </ul>
      </div>
    </div>
    <div id="offcanvas-cart" class="uk-offcanvas">
            <div class="uk-offcanvas-bar uk-offcanvas-bar-flip">
                <div class="uk-panel">
                    <h3>Корзина</h3>
                    <ul class="list-thumbs-pro">
            {% if bag_items %}
            {% for item in bag_items %}
                        <li class="product">
                            <div class="thumb-item">
                                <div class="thumb-item-img">
                  {% if item.product.image %}
                                    <a href="#"><img width="80" src="{{ item.product.image.url }}" alt="{{ item.product.name }}"></a>
                  {% else %}
                  <a href="#"><img width="80" src="{{ MEDIA_URL }}noimage.png" alt="{{ item.product.name }}"></a>
                  {% endif %}
                                </div>
                                <div class="thumb-item-content">
                                    <h3><a href="#">{{ item.product.name }}</a></h3>
                                    <p class="product-price"><ins>${{ item.product.price }}</ins></p>
                                </div>
                            </div>
                        </li>
                    </ul>
                    <ul class="list-inline cart-subtotals">
                        <li class="cart-subtotal"><strong>Промежуточный итог:</strong></li>
                        <li class="price"><span class="amount"><strong>${{ total|floatformat:2 }}</strong></span></li>
                    </ul>
          {% endfor %}
          {% endif %}
                    <a href="{% url 'view_bag' %}" class="btn btn-dark btn-block">Посмотреть корзину</a>
                    <a href="shop-checkout.html" class="btn btn-primary btn-block">Перейти к оплате</a>
                </div>
            </div>
  </main>
  <footer id="footer" class="bg-color6">
    <div class="container">
      <div class="row">
        <div class="col-md-3">
          <h4>Связаться с нами</h4>
          <p>Morbi accumsan ipsum velit. Нам не нужно быть недостаточно аутентичными</p>
          <address>
            Заказ: +12 345 6789<br>
            Поддержка клиентов: +12 987 6543<br>
            Электронная почта: <a href="mailto:[email protected]">[email protected]</a>
          </address>
          <ul class="social-icons">
            <li><a href="#" target="_blank" data-toggle="tooltip" data-placement="top" title="Facebook"><i class="fa fa-facebook"></i></a></li>
            <li><a href="#" target="_blank" data-toggle="tooltip" data-placement="top" title="Twitter"><i class="fa fa-twitter"></i></a></li>
            <li><a href="#" target="_blank" data-toggle="tooltip" data-placement="top" title="Google Plus"><i class="fa fa-google-plus"></i></a></li>
            <li><a href="#" target="_blank" data-toggle="tooltip" data-placement="top" title="Instagram"><i class="fa fa-instagram"></i></a></li>
            <li><a href="#" target="_blank" data-toggle="tooltip" data-placement="top" title="Flickr"><i class="fa fa-flickr"></i></a></li>
          </ul>
        </div>
        <div class="col-md-2">
          <h4>Категории</h4>
          <ul class="list-links">
            <li><a href="#">Мужчины</a></li>
            <li><a href="#">Женщины</a></li>
            <li><a href="#">Аксессуары</a></li>
            <li><a href="#">Бестселлеры</a></li>
            <li><a href="#">Специальные продукты</a></li>
            <li><a href="#">Распродажа</a></li>
          </ul>
        </div>
        <div class="col-md-2">
          <h4>Полезные ссылки</h4>
          <ul class="list-links">
            <li><a href="#">О нас</a></li>
            <li><a href="#">Размеры</a></li>
            <li><a href="#">Доставка</a></li>
            <li><a href="#">Возврат</a></li>
            <li><a href="#">Политика конфиденциальности</a></li>
            <li><a href="#">Возврат и обмен</a></li>
            <li><a href="#">Условия и положения</a></li>
          </ul>
        </div>
        <div class="col-md-2">
          <h4>Последние твиты</h4>
          <ul class="latest-tweets">
            <li>Nam nec tellus a odio tincidunt auctor a  odio. Sed non  <a href="http://pixelgeeklab.com" target="_blank">http://pixelgeeklab.com</a> <span class="tweet-date">2 дня назад</span></li>
          </ul>
        </div>
        <div class="col-md-3">
          <div class="footer-copyright">
            <p><img src="images/logo-w.png" alt=""></p>
            <p>© 2014 Marvel. Все права защищены. Разработано <a href="http://pixelgeeklab.com" target="_blank">Pixelgeeklab.com</a>.</p>
            <ul class="card-icons">
              <li><a href="#" target="_blank" data-toggle="tooltip" data-placement="top" title="Paypal"><i class="fa fa-cc-paypal"></i></a></li>
              <li><a href="#" target="_blank" data-toggle="tooltip" data-placement="top" title="Mastercard"><i class="fa fa-cc-mastercard"></i></a></li>
              <li><a href="#" target="_blank" data-toggle="tooltip" data-placement="top" title="Visa"><i class="fa fa-cc-visa"></i></a></li>
              <li><a href="#" target="_blank" data-toggle="tooltip" data-placement="top" title="Discover"><i class="fa fa-cc-discover"></i></a></li>
              <li><a href="#" target="_blank" data-toggle="tooltip" data-placement="top" title="AMEX"><i class="fa fa-cc-amex"></i></a></li>
            </ul>
          </div>
        </div>
      </div>
    </div>
  </footer>
  <!-- Поставщики -->
  <script src="vendor/jquery/jquery.js"></script>
  <script src="vendor/bootstrap/bootstrap.js"></script>
  <script src="vendor/jquery.validation/jquery.validation.js"></script>
  <script src="vendor/owlcarousel/owl.carousel.js"></script>
  <script src="vendor/flexslider/jquery.flexslider-min.js"></script>
  <script src="vendor/countdown/countdown.min.js"></script>
  <script src="vendor/chosen/chosen.jquery.min.js"></script>
  <script src="vendor/pricefilter/jquery.pricefilter.js"></script>
  <script src="vendor/masonry/imagesloaded.pkgd.min.js"></script>
  <script src="vendor/masonry/masonry.pkgd.min.js"></script>
  <script src="vendor/uikit/uikit.js"></script>
  <script src="vendor/magnific-popup/jquery.magnific-popup.js"></script>
  
  <!-- Основы темы, компоненты и настройки -->
  <script src="js/theme.js"></script>
  {% block postloadjs %}
    <script type="text/javascript">
        $('.toast').toast('show');
    </script>
  {% endblock %}
</body>

</html>

Любая помощь будет высоко оценена, извините, если я упустил какую-либо важную информацию, напишите, что мне не хватает, и я добавлю это.

Ответ или решение

Ошибка "Page not found (404) No Product matches the given query" обычно возникает, когда ваше приложение пытается получить доступ к объекту (в данном случае, продукту), который не существует. После удаления всех продуктов из базы данных, ваше приложение уже не может найти запрашиваемые данные, что и приводит к этой ошибке.

Вот шаги, которые помогут вам устранить эту проблему:

  1. Проверка использования продуктов в других представлениях: Убедитесь, что вы не используете продукты в других представлениях, включая "home.views.index". Например, если в шаблоне home/index.html или в любом другом шаблоне вы ссылаетесь на продукты, это может вызвать ошибку. Вам нужно будет удалить или закомментировать этот код, если он доступен.

  2. Обновление представлений: Если вы хотите показать страницу без ошибок даже тогда, когда у вас нет доступных продуктов, вы можете оснастить функцию представления all_products условием для обработки случая, когда продукты отсутствуют:

def all_products(request):
    products = Product.objects.all()

    if not products:
        # Здесь вы можете настроить контекст или сообщение об отсутствии продуктов
        context = {'message': 'Продукты отсутствуют.'}
    else:
        context = {
            'products': products,
        }

    return render(request, "products/products.html", context)
  1. Использование get_object_or_404: Вы уже используете get_object_or_404 в функции product_detail, что хорошо. Это наилучший способ обработки случаев, когда объект не найден.

  2. Проверка шаблона index.html: В вашем шаблоне index.html, если в коде происходит попытка извлечь информацию о продуктах или если есть ссылки на недоступные продукты, это также может вызвать ошибку. Убедитесь в том, что этот шаблон не зависит от присутствия продуктов.

  3. Настройка маршрутов: Проверьте, чтобы в products/urls.py у вас было правильно настроено обращение к представлениям. Также убедитесь, что URL-адреса для деталей продукта (<int:product_id>/) правильно настроены в шаблонах, чтобы не было попыток доступа к несуществующим продуктам.

  4. Тестирование: После внесения всех необходимых изменений запустите сервер и проверьте ваши URL. Повторите запросы, чтобы убедиться, что ошибка больше не возникает.

  5. Установка тестовых данных: Если вы просто тестируете приложение, возможно, имеет смысл временно восстановить dummy данные, чтобы гарантировать, что приложение функционирует корректно. После тестирования можно удалить данные и настроить приложение, как вам нужно.

Таким образом, проверьте представления, шаблоны и убедитесь, что в вашей базе данных есть нужные данные. Если вы будете следовать этим указаниям, ваша проблема должна быть решена. Если у вас будут дополнительные вопросы — не стесняйтесь спрашивать!

Оцените материал
Добавить комментарий

Капча загружается...