Django不会接受争论

时间:2016-06-29 07:24:58

标签: python django django-urls

我真的很难理解向Django网址发送参数和keword参数的方法。以下是案例研究:

我有一个使用通用基本视图的视图:

class CartView(View):
   def get(self, request, *args, **kwargs):
       item = request.GET.get('item')
       qty = request.GET.get('qty')
       print item, qty
       return HttpResponseRedirect('/')

通过上面的视图,我能够使用像"localhost:8000/cart/?item=4&qty=200"这样的网址中的aurguments,并在终端中打印数量的项目。

我很快就对代码进行了更改:

from carts.models import Cart, CartItem
from products.models import Variation


class CartView(View):
    def get(self, request, *args, **kwargs):
        item_id = request.GET.get('item')
        if item_id:
            item_instance = get_object_or_404(Variation, id=item_id)
            qty = request.GET.get('qty')
            cart = Cart.objects.all()[0]
            cart_item = CartItem.objects.get_or_create(cart=cart, item=item_instance)[0]
            cart_item.quantity = qty
            cart_item.save()
            print cart_item
        return HttpResponseRedirect('/')

以同样的方式传递像"localhost:8000/cart/?item=4&qty=200"这样的参数,它会向我显示错误:

  

找不到404页面没有变化与给定的查询匹配。

urls.py

urlpatterns = [
    url(r'^home/$', 'newsletter.views.home', name='home'),
    url(r'^contact/$', 'newsletter.views.contact', name='contact'),
    url(r'^about/$', 'project.views.about', name='about'),
    url(r'^admin/', include(admin.site.urls)),
    url(r'^accounts/', include('registration.backends.default.urls')),
    url(r'^cart/$', CartView.as_view(), name='cart'),
    url(r'^', include('products.urls')),
    url(r'^categories/', include('products.urls_categories')),

1 个答案:

答案 0 :(得分:2)

  

未找到404页面

     

没有变化与给定的查询匹配。

此消息来自您的行:

item_instance = get_object_or_404(Variation, id=item_id)

表示您没有Variation个与给定id匹配的对象。