Skip to main content
 首页 » 编程设计

python之Django 网址不接受参数

2024年10月17日31lvdongjie

我真的很难理解将参数和 keword 参数分派(dispatch)给 Django url 的方法。以下是案例研究:

我有一个使用通用基础 View 的 View :

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

通过上面的 View ,我能够在 url 中使用参数,如 "localhost:8000/cart/?item=4&qty=200" 并在终端中打印带有数量的项目。

一旦我对代码进行了更改,例如:

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 Page Not Found No Variation matches the given query.

网址.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')), 

请您参考如下方法:

404 Page Not Found

No Variation matches the given query.

此消息来自您的线路:

item_instance = get_object_or_404(Variation, id=item_id) 

并且意味着您没有匹配给定 id 的 Variation 对象。