【问题标题】:NoReverseMatch at /cart/ Reverse for 'ProductView' not found. 'ProductView' is not a valid view function or pattern nameNoReverseMatch 在 /cart/ 未找到“ProductView”的反向。 “ProductView”不是有效的视图函数或模式名称
【发布时间】:2021-08-14 08:27:24
【问题描述】:

错误

NoReverseMatch 在 /cart/ 未找到“ProductView”的反向。 'ProductView' 不是有效的视图函数或模式名称。 请求方法:GET 请求网址:http://127.0.0.1:8000/cart/ Django 版本:3.2.3 异常类型:NoReverseMatch 异常值:
未找到“ProductView”的反向。 'ProductView' 不是有效的视图函数或模式名称。

错误截图

This is where it shows me error, when I try to add a product to cart sessions,tho the product it added to cart sessions but when the url for cart-details is called, while loading the main base.html file it gives me a error that productView cannot be found

ProductApp 模板'app/base.html'

<!doctype html>
{% load static %}
<html lang="en">
  <head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <base href="/">
    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Poppins:200,300,400,500,600,700,800&display=swap" type="text/css">
    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lora:400,400i,700,700i&display=swap" type="text/css">
    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Amatic+SC:400,700&display=swap" type="text/css">

    <!-- Bootstrap CSS -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous">
    <!-- <link rel="stylesheet" href="{% static 'app/css/open-iconic-bootstrap.min.css' %}">
    <link rel="stylesheet" href="{% static 'app/css/animate.css' %}"> -->
    <!--Owl Carousel CSS-->
    <link rel="stylesheet" href="{% static 'app/css/owl.theme.default.min.css' %}" type="text/css">
    <link rel="stylesheet" href="{% static 'app/css/magnific-popup.css' %}" type="text/css">
    <link rel="stylesheet" href="{% static 'app/css/aos.css' %}" type="text/css">

    <link rel="stylesheet" href="{% static 'app/css/ionicons.min.css' %}" type="text/css">
    <link rel="stylesheet" href="{% static 'app/css/bootstrap-datepicker.css' %}" type="text/css">
    <link rel="stylesheet" href="{% static 'app/css/jquery.timepicker.css' %}" type="text/css">
    <link rel="stylesheet" href="{% static 'app/css/flaticon.css' %}" type="text/css">
    <link rel="stylesheet" href="{% static 'app/css/icomoon.css' %}" type="text/css">
    <link rel="stylesheet" href="{% static 'app/css/owl.carousel.min.css' %}" type="text/css">

    <!--FontAwesome CSS-->
    <link rel="stylesheet" href="{% static 'app/css/all.min.css' %}" type="text/css">

    <!--Custom CSS-->
    <link rel="stylesheet" href="{% static 'app/css/style.css' %}" type="text/css">
    <!-- <link rel="stylesheet" href="{% static 'app/css/style.css' %}"> -->


    <title>VEGEFOODS | {% block title %} {% endblock title %} </title>
  </head>
  <body>
    <nav class="navbar navbar-expand-lg navbar-dark ftco_navbar bg-dark ftco-navbar-light" id="ftco-navbar">
     <div class="container">
       <a class="navbar-brand" href="{% url 'app:home' %}">VEGEFOODS</a>
       <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
         <span class="navbar-toggler-icon"></span>
       </button>
       <div class="collapse navbar-collapse" id="navbarSupportedContent">
         <ul class="navbar-nav me-auto mb-2 mb-lg-0">
         </ul>
         <div>
          <ul class="navbar-nav me-auto mb-2 mb-lg-0">
           <li class="nav-item">
              <a class="nav-link active" aria-current="page" href="{% url 'app:home' %}">Home</a>
           </li>
           <li class="nav-item dropdown">
            <a class="nav-link dropdown-toggle" href="#" id="electronicsDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
              Shop
            </a>
            <ul class="dropdown-menu" aria-labelledby="electronicsDropdown">
              <li><a class="dropdown-item" href="{% url 'app:Vegetables' %}">Vegatables</a></li>
              <li><a class="dropdown-item" href="{% url 'app:Fruits' %}">Fruits</a></li>
              <li><a class="dropdown-item" href="{% url 'app:Dried' %}">Dried</a></li>
            </ul>
          </li>
          <li class="nav-item mx-2">
            <a href="{% url 'app:showcart' %}" class="nav-link"><span class="badge bg-danger">4</span> Cart </a>
           </li>
          {% if request.user.is_authenticated %}
           <li class="nav-item dropdown mx-2">
              <a class="nav-link dropdown-toggle" href="#" id="profileDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
                {{request.user.username.title}}
              </a>
              <ul class="dropdown-menu" aria-labelledby="profileDropdown">
                <li><a class="dropdown-item" href="{% url 'app:profile' %}">Profile</a></li>
                <li><a class="dropdown-item" href="{% url 'app:orders' %}">Orders</a></li>
                <li><a class="dropdown-item" href="{% url 'app:passwordchange' %}">Change Password</a></li>
                <li><a class="dropdown-item" href="{% url 'app:logout' %}">Logout</a></li>
              </ul>
            </li>
            {% else %}
            <li class="nav-item mx-2">
             <a href="{% url 'app:login' %}" class="nav-link">Login</a>
            </li>
            {% endif %}
          </ul>
         </div>
       </div>
     </div>
    </nav>
    {% block banner_slider %} {% endblock banner_slider %}
    {% block main-content %} {% endblock main-content %}

    <!-- Start Footer -->
    <footer class="ftco-footer ftco-section">
      <div class="container">
        <div class="row">
            <div class="mouse align-items-center">
                        <a href="#" class="mouse-icon align-items-center">
                            <div class="mouse-wheel align-items-center"><span class="ion-ios-arrow-up align-items-center"></span></div>
                        </a>
                    </div>
        </div>
        <div class="row mb-5">
          <div class="col-md">
            <div class="ftco-footer-widget mb-4">
              <h2 class="ftco-heading-2">Vegefoods</h2>
              <p>Far far away, behind the word mountains, far from the countries Vokalia and Consonantia.</p>
              <ul class="ftco-footer-social list-unstyled float-md-left float-lft mt-5">
                <li class="ftco-animate"><a href="#"><span class="icon-twitter"></span></a></li>
                <li class="ftco-animate"><a href="#"><span class="icon-facebook"></span></a></li>
                <li class="ftco-animate"><a href="#"><span class="icon-instagram"></span></a></li>
              </ul>
            </div>
          </div>
          <div class="col-md">
            <div class="ftco-footer-widget mb-4 ml-md-5">
              <h2 class="ftco-heading-2">Menu</h2>
              <ul class="list-unstyled">
                <li><a href="#" class="py-2 d-block">Shop</a></li>
                <li><a href="#" class="py-2 d-block">About</a></li>
                <li><a href="#" class="py-2 d-block">Journal</a></li>
                <li><a href="#" class="py-2 d-block">Contact Us</a></li>
              </ul>
            </div>
          </div>
          <div class="col-md-4">
             <div class="ftco-footer-widget mb-4">
              <h2 class="ftco-heading-2">Help</h2>
              <div class="d-flex">
                  <ul class="list-unstyled mr-l-5 pr-l-3 mr-4">
                    <li><a href="#" class="py-2 d-block">Shipping Information</a></li>
                    <li><a href="#" class="py-2 d-block">Returns &amp; Exchange</a></li>
                    <li><a href="#" class="py-2 d-block">Terms &amp; Conditions</a></li>
                    <li><a href="#" class="py-2 d-block">Privacy Policy</a></li>
                  </ul>
                  <ul class="list-unstyled">
                    <li><a href="#" class="py-2 d-block">FAQs</a></li>
                    <li><a href="#" class="py-2 d-block">Contact</a></li>
                  </ul>
                </div>
            </div>
          </div>
          <div class="col-md">
            <div class="ftco-footer-widget mb-4">
                <h2 class="ftco-heading-2">Have a Questions?</h2>
                <div class="block-23 mb-3">
                  <ul>
                    <li><span class="icon icon-map-marker"></span><span class="text">203 Fake St. Mountain View, San Francisco, California, USA</span></li>
                    <li><a href="#"><span class="icon icon-phone"></span><span class="text">+2 392 3929 210</span></a></li>
                    <li><a href="#"><span class="icon icon-envelope"></span><span class="text">info@yourdomain.com</span></a></li>
                  </ul>
                </div>
            </div>
          </div>
        </div>
        <div class="row">
          <div class="col-md-12 text-center">

            <p>
                          Copyright @ 2021
                        </p>
          </div>
        </div>
      </div>
    
    </footer> <!-- End Footer -->
     <!-- loader -->
    <!-- <div id="ftco-loader" class="show fullscreen"><svg class="circular" width="48px" height="48px"><circle class="path-bg" cx="24" cy="24" r="22" fill="none" stroke-width="4" stroke="#eeeeee"/><circle class="path" cx="24" cy="24" r="22" fill="none" stroke-width="4" stroke-miterlimit="10" stroke="#F96D00"/></svg></div> -->
    <!-- Jquery -->
    <script src="https://code.jquery.com/jquery-3.5.1.min.js" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>
    <!-- Bootstrap Bundle with Popper -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/js/bootstrap.bundle.min.js" integrity="sha384-ygbV9kiqUc6oa4msXn9868pTtWMgiQaeYH7/t7LECLbyPA2x65Kgf80OJFdroafW" crossorigin="anonymous"></script>

    <script src="{% static 'app/js/owl.carousel.min.js' %}"></script>
    <script src="{% static 'app/js/all.min.js' %}"></script>
    <script src="{% static 'app/js/myscript.js' %}"></script>
    <script src="{% static 'app/js/main.js' %}"></script>
    <script src="{% static 'app/js/jquery.min.js' %}"></script>
    <script src="{% static 'app/js/jquery-migrate-3.0.1.min.js' %}"></script>

    <script src="{% static 'app/js/popper.min.js' %}"></script>
    <script src="{% static 'app/js/bootstrap.min.js' %}"></script>
    <script src="{% static 'app/js/jquery.easing.1.3.js' %}"></script>
    <script src="{% static 'app/js/jquery.waypoints.min.js' %}"></script>
    <script src="{% static 'app/js/jquery.stellar.min.js' %}"></script>
    <script src="{% static 'app/js/owl.carousel.min.js' %}"></script>
    <script src="{% static 'app/js/jquery.magnific-popup.min.js' %}"></script>
    <script src="{% static 'app/js/jquery.animateNumber.min.js' %}"></script>
    <script src="{% static 'app/js/bootstrap-datepicker.js' %}"></script>
    <script src="{% static 'app/js/scrollax.min.js' %}"></script>
    <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBVWaKrjvy3MaE7SQ74_uJiULgl1JY0H2s&sensor=false"></script>
    <script src="{% static 'app/js/google-map.js' %}"></script>
    <!-- <script src="https://unpkg.com/aos@next/dist/aos.js"></script> -->
    <script src="{% static 'app/js/aos.js' %}"></script>
  </body>
</html>

ProductApp view.py

def ProductView(request):
    vegetables = Products.objects.filter(Sub_Category_ID__CategoryID__name='Vegetables')
    return render(request, 'app/home.html',{'Vegetables':vegetables})

ProductApp urls.py

from re import template
from django.urls import path
from app import views

from django.conf import settings
from django.conf.urls.static import static
from django.contrib.auth import views as auth_views
from.forms import LoginForm, MyPasswordChangeForm

app_name='app'

urlpatterns = [
    # path('', views.home),
    path('',views.ProductView,name='home'),
    path('product-detail/<int:pk>', views.ProductDetailView.as_view(), name='product-detail'),


    
    # path('add-to-cart/', views.add_to_cart, name='add-to-cart'),
    path('showcart/',views.show_cart,name='showcart'),

    # path('pluscart/',views.plus_cart),
    # path('minuscart/',views.minus_cart),
    # path('removecart/',views.remove_cart),


    # path('add-to-cart/<slug:data>', views.add_to_cart, name='add-to-cart_DATA'),
    path('buy/', views.buy_now, name='buy-now'),
    path('profile/', views.ProfileView.as_view(), name='profile'),
    path('address/', views.address, name='address'),
    path('orders/', views.orders, name='orders'),
    # path('changepassword/', views.change_password, name='changepassword'),
    path('Fruits/', views.Fruits, name='Fruits'),
    path('Fruits/<slug:data>', views.Fruits, name='FruitsData'),
    path('Dried/', views.Dried, name='Dried'),
    path('Dried/<slug:data>', views.Dried, name='DriedData'),
    path('Vegetables/', views.Vegetables, name='Vegetables'),
    path('Vegetables/<slug:data>', views.Vegetables, name='VegetablesData'),
    path('accounts/login/',auth_views.LoginView.as_view(template_name='app/login.html',authentication_form=LoginForm),name='login'),
    path('passwordchange/',auth_views.PasswordChangeView.as_view(template_name='app/passwordchange.html',form_class=MyPasswordChangeForm, success_url='/passwordchangedone/'),name='passwordchange'),
    
    path('passwordchangedone/',auth_views.PasswordChangeDoneView.as_view(template_name='app/passwordchangedone.html'),name='passwordchangedone'),
    
    path('logout/',auth_views.LogoutView.as_view(next_page='login'),name='logout'),
    # path('login/', views.login, name='login'),
    path('registration/', views.CustomerRegistrationView.as_view(), name='customerregistration'),
    path('checkout/', views.checkout, name='checkout'),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

CartApp Views.py

from cart.forms import CartAddProductForm
from django.shortcuts import get_object_or_404, redirect, render
from app.models import Products
from django.views.decorators.http import require_POST
from .cart import Cart
from .forms import CartAddProductForm

# Create your views here.

@require_POST
def cart_add(request, product_id):
    cart = Cart(request)
    product = get_object_or_404(Products, id=product_id)
    form = CartAddProductForm(request.POST)
    if form.is_valid():
        cd = form.cleaned_data
        cart.add(product=product, quantity=cd['quantity'])

    return redirect('cart:cart_detail')

def cart_remove(request,product_id):
    cart = Cart(request)
    product = get_object_or_404(Products, id=product_id)
    cart.remove(product)

    return redirect('cart:car_detail')

def cart_detail(request):
    cart = Cart(request)
    return render (request ,'cart/cartdetail.html',{'cart':cart})
    

CartApp 网址

from django import urls
from django.urls import path
from django.urls.conf import include
from . import views

app_name='cart'

extra_patterns = [
    path('add/carts/<int:product_id>/', views.cart_add, name='cart_add'),
]

urlpatterns=[
   
    path ('add/',include(extra_patterns)),
    path ('remove/<int:product_id>/',views.cart_remove,name='cart_remove'),
    path ('',views.cart_detail,name='cart_detail'),

]

** CartApp 模板'detail.html'**

{% extends 'app/base.html' %}
{% load static %}
{% block title %}Cart{% endblock title %}
{% block main-content %}
<div class="container my-5">
 <div class="row">
  <h1 class="text-center mb-5">Shopping Cart</h1>
  <div class="col-sm-8">
  <div class="card">
   <div class="card-body">
    <h3>Cart</h3>
    {% for items in cart %}
    {% with product=items.product %}
    <div class="row">
     <div class="col-sm-3 text-center align-self-center">
       <img src={{product.product_image.url}} alt="" srcset="" class="img-fluid img-thumbnail shadow-sm" height="150" width="150">
      </div>
     <div class="col-sm-9">
      <div>
       <h5>{{product.name}}</h5>
       <p class="mb-2 text-muted small">Description: {{product.description}}</p>
       <div class="my-3">
        <label for="quantity">cart:</label>
        <!-- <a class="minus-cart btn" pid="{{cart.productID.id}}"><i class="fas fa-minus-square fa-lg"></i></a> -->
        <a class="minus-cart btn"><i class="fas fa-minus-square fa-lg"></i></a>
          <span id="quantity">{{item.quantity}}</span>
          <a class="plus-cart btn"><i class="fas fa-plus-square fa-lg"></i></a>
        <!-- <a class="plus-cart btn" pid="{{cart.productID.id}}"><i class="fas fa-plus-square fa-lg"></i></a> -->
       </div> 
       <div class="d-flex justify-content-between">
           <form action="{% url 'cart:cart_remove' product.id %}" method="post">
               <input type="submit" value="Remove">
               {% csrf_token %}
           </form>
        <!-- <a class="btn btn-sm btn-secondary mr-3 remove-cart" pid="{{cart.productID.id}}"><strong>Remove Item</strong>  </a> -->
        <p class="mb-0"><span><strong>Rs. {{item.total_price}} </strong></span></p>
       </div>
      </div>
     </div>
    </div>
    {% endwith %}
    {% endfor %}
    </div>
    </div>
  </div>

  <div class="col-sm-4">
   <div class="card">
    <div class="card-body">
      <h3>Total Amount</h3>
      <ul class="list-group">
       <!-- <li class="list-group-item d-flex justify-content-between align-items-center border-0 px-0 pb-0">Amount<span>Rs. <span id="amount">{{amount}}</span></span></li>
       <li class="list-group-item d-flex justify-content-between align-items-center px-0">Shipping<span>Rs. 70.00</span></li> -->
       <li class="list-group-item d-flex justify-content-between align-items-center border-0 px-0 mb-3">
        <div>
           <strong>Total</strong>
         </div>
         <span><strong>Rs. {{carts.get_total_price}}</strong></span>
       </li>
      </ul>
      <!-- <div class="d-grid"><a href="{% url 'ProductView' %}" class="btn btn-primary">Continue Shopping</a></div> -->
      <!-- <div class="d-grid"><a href="{% url 'app:checkout' %}" class="btn btn-primary">Place Order</a></div> -->
    </div>
   </div>
  </div>
  
 </div>
</div>
{% endblock main-content %}

MainProject Urls.py

from django.conf import settings
from django.conf.urls.static import static
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path ('cart/', include('cart.urls',namespace='cart')),
    path('',include('app.urls',namespace='app')),
    
]

urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

【问题讨论】:

  • 删除那些 cmets &lt;!-- &lt;div class="d-grid"&gt;&lt;a href="{% url 'ProductView' %}" .... --&gt;,一个 HTML 注释并不意味着 Django 不会尝试渲染它。

标签: javascript python html css django


【解决方案1】:

问题在于这条注释行,

  <!-- <div class="d-grid"><a href="{% url 'ProductView' %}" class="btn btn-primary">Continue Shopping</a></div> -->

改成

 <!-- <div class="d-grid"><a href="{% url 'home' %}" class="btn btn-primary">Continue Shopping</a></div> -->

即使该行被注释,Django 模板也会呈现 URL 模板标签。

【讨论】:

    猜你喜欢
    • 2019-08-13
    • 2019-05-19
    • 2019-04-21
    • 2019-06-01
    • 2021-11-15
    • 2017-09-13
    • 2020-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多