首页 文章

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

提问于
浏览
1

购物车应用

views.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有一些错误

Error

NoReverseMatch at / products /反向'update_cart',参数'(1,)'和关键字参数'{}'未找到 . 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.py in _reverse_with_prefix ,第452行Python可执行文件:/Users/apulgupta/Desktop/table1.2/bin/python Python版本:2.7.10 Python路径:['/ Users/apulgupta/Desktop/table1.2/table1_2','/ Users / apulgupta /Desktop/table1.2/lib/python27.zip','/ Users / apulgupta /Desktop / table1.2 / lib / python2.7','/ Users / apulgupta /Desktop / table1.2 / lib / python2.7 / plat-darwin','/ Users / apulgupta/Desktop/table1.2/lib/python2.7/plat-mac','/ Users / apulgupta /Desktop / table1.2 / lib / python2.7 / plan -mac / lib-scriptpackages','/ Users / apulgupta /Desktop / table1.2 / lib / python2.7 / lib -tk','/ Users / apulgupta /Desktop / table1.2 / lib / python2.7 / lib -old ','/ Users / apulgupta/Desktop/table1.2/lib/python2.7/lib-dynload','/ System / Library / Frameworks / Pepy.framework / Version / 1.7 / lib / python2.7','/系统/库/框架/ Python.framework / Versions / 2.7 / lib / python2.7 / plat-darwin','/ System / Library / Fra meworks / Python.framework / Versions / 2.7 / lib / python2.7 / lib-tk','/ System / Library / Frame /Python.framework / Version / 7.7 / lib / python2.7 / plat-mac','/ System / Library / Frameworks / Python.framework / Versions / 2.7 / lib / python2.7 / plat-mac / lib-scriptpackages','/ Users / apulgupta /Desktop / table1.2 / lib / python2.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 / products / $']

2 回答

  • 2

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

    所以URL应该是

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

    在urls.py中并使用views.py中的id

  • 0

    回溯指向问题url模式: '^$carts/products/$' . 你在开始时有一个迷路的$符号,这意味着该模式的其余部分将不匹配 .

相关问题