当前位置: 首页 > 知识库问答 >
问题:

尝试使用django制作购物车,但在视图中,我传递的是产品id而不是slug,因为我是直接从主页向购物车添加产品

崔单弓
2023-03-14

购物车应用程序

视图.py

from django.shortcuts import render, HttpResponseRedirect
from django.core.urlresolvers import reverse
# Create your views here.

from products.models import Product
from .models import Cart 

def view(request):
   cart = Cart.objects.all()[0]
   context = {"cart": cart}
   template = "cart/view.html"
   return render(request, template, context)

def update_cart(request, id):
   cart = Cart.objects.all()[0]
   try:
       product = Product.objects.get(id=id)
   except Product.DoesNotExist:
       pass
   except:
       pass
   if not product in cart.products.all():
       cart.products.add(product)
   else:
       cart.products.remove(product)

   return HttpResponseRedirect(reverse("cart")) 

urls.py

from django.conf import settings
from django.conf.urls import patterns, include, url
from django.conf.urls.static import static
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
   # Examples:
    url(r'^$', 'products.views.home', name='home'),
    url(r'^products/$', 'products.views.home', name='products'),
    url(r'^cart/products/$', 'carts.views.update_cart', name='update_cart'),
    url(r'^cart/$', 'carts.views.view', name='cart'),
    url(r'^admin/', include(admin.site.urls)),
) 

if settings.DEBUG:
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

base.html

   <p><a href='{% url "update_cart" product.id %}' class="btn btn-primary" role="button">Add to cart</a> </p>

据我说,urls.py有些故障。

错误

在/products/Reverse处找不到参数为“(1,)”和关键字参数为“{}”的“update_cart”的NoReverseMatch。尝试了1个模式:['carts/products/$']请求方法:GET请求URL:http://127.0.0.1:8000/products/Django版本:1.6.5异常类型:NoReverseMatch异常值:找不到具有参数“(1,)”和关键字参数“{}”的“update_cart”的反向。尝试了1个模式:[“$carts/products/$”]异常位置:/Users/apulgupta/Desktop/table1.2/lib/python2.7/site-packages/django/core/urlresolvers。reverse_ with_ prefix中的py,第452行Python可执行文件:/Users/apulgupta/Desktop/table1.2/bin/pythonPythonVersion:2.7.10PythonPath:[“/Users/apulgupta/Desktop/table1.2/table1_2',”/Users/apulgupta/Desktop/table1.2/lib/python27.zip',”/用户/apugupta/桌面/table1.2/lib/ppython2.7',“/Users/apulgutta/桌面/表1.2/lib/python2.7/plat darwin”,“/Users/apulkupta/Desktop/表1.2/库/python2.7/平台mac”,”/Users/apulgupsta/Desktop/表1.2/lib/pyton2.7/plat-mac”,ulgupta/Desktop/table1.2/lib/python2.7/lib tk',“/Users/apulgupta/Desktop/table1.2/lib/python2.7/lib-old',”/Users/apulgupta/Desktop/ttable1.2/lib/python2.7/lib dynload',“/System/Library/Frameworks/Python.Frameworks/Versions/2.7/lib/ppython2.7',”/System/Library/Framworks/Python.framework/Versions/2.7/lib/python2.7/plat darwin',“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac”,“/Systystem/LLibrary/Frameworks/Python.framework/Version/2.7/lib/pyton2.7/plat-mac/lib-scriptpackages”,“/Users/apulgupta/Desktop/table1.2/lib/ppython2.7/site-packages”]服务器时间:2017年2月28日星期二00:23:35 0530模板渲染期间出错

在模板 /Users/apulgupta/Desktop/table1.2/table1_2/templates/base.html 中,第 83 行的错误为“update_cart”,参数为 “(1,)”和关键字参数“{}”,找不到。已尝试 1 种模式: ['$carts/产品/$']

共有2个答案

颜祖鹤
2023-03-14

您应该添加正则表达式来捕获 ID。

所以网址应该是

url(r'^cart/products/(?P<product_id>\d+)$', 'carts.views.update_cart', name='update_cart'),

并使用views.py中的id

段劲
2023-03-14

回溯指向问题url模式:“^$carts/products/$”。您在开头有一个杂乱的$符号,这意味着模式的其余部分将不匹配。

 类似资料:
  • 如何在Woocommerce购物车页面中的购物车项目名称后添加产品ID? 我知道我需要先不返回,因为这样会把我从函数中拉出来,但我很好奇我该如何去做这件事。

  • 问题内容: 我有上面的代码。 如果我在cart_item上运行print_r,我将得到一个多维数组: 我如何只获得product_id? 我试过$ test = 没用 问题答案: 要获取 foreach循环中的每个购物车商品(对于简单产品): 如果是可变产品,请获取 : 或在两种情况下 ( Woocommerce 3+中 的 Object在哪里) : 更新: 循环外使用产品ID 1)打破循环 (仅

  • 我是新来的。我想将产品添加到购物车并列出购物车的所有产品。我已经将Co-Cart插件添加到我的服务器,并且我正在使用Co-Cart API实现购物车相关功能。 我面临的问题是,我不能在我的反应本地应用程序中查看购物车产品。以下是我现在使用的API: 1.将产品添加到购物车: 方法:邮寄 URL:https://www.myhost.com/wp-json/wc/v2/cart/add?token=

  • WooCommerce中,非Ajax情况下,点击加入购物车按钮后跳转到何处可以通过filter:add_to_cart_redirect修改,下面代码可以实现产品加入购物车后直接结账的功能,跳过购物车页面。 如果你希望Shop首页或分类页中的加入购物车按钮也具备这种效果,不要勾选Enable AJAX add to cart buttons on archives功能。否则该代码只在单个产品页面有

  • 我经营一家Woocommerce商店,该商店也提供免费产品(_常规价格=0)。客户必须选择数量并将其添加到购物车中,然后下订单才能收到产品。但这并不是Woocommerce的工作原理,它隐藏了所有价格为0的产品的“添加到购物车”链接。并且不会在购物车页面中显示它们。有没有解决这个问题的办法?非常感谢。