Django url 不接受参数
Posted
技术标签:
【中文标题】Django url 不接受参数【英文标题】:Django urls not taking arguments 【发布时间】:2016-10-31 18:29:56 【问题描述】:我真的很难理解将参数和关键字参数发送到 Django url 的方法。以下是案例研究:
我有一个使用通用基础视图的视图:
class CartView(View):
def get(self, request, *args, **kwargs):
item = request.GET.get('item')
qty = request.GET.get('qty')
print item, qty
return HttpResponseRedirect('/')
通过上面的视图,我可以使用 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 匹配给定的查询。
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')),
【问题讨论】:
Is it possible to pass query parameters via Django's % url % template tag?的可能重复 因为您没有 ID 为 4 的 Variation 对象 我将参数传递给具有变体对象的偶数产品。同样的问题。其次,我创建了一个 post_save 信号来转换所有具有默认变化的产品,以便在购物车中更好地处理它。现在我只是在变体上实现购物车。 那是我的错误,我删除了一些测试产品并且 ID 被更改为 10。问题是数据库如果 ID 保存 1 到 10 并且我们删除过去的产品,那么新保存的产品将具有上面的 ID 10.我去manage.py shell并在那里导入Variation。然后将 Variation.objects.all().first() 保存在一个变量中。当我调用 variable.id 时,它向我显示了第一个产品的 14。因此,当我使用 item=14 传递参数时,它接受了它。 @Antoine Pinsard 你是对的。发表你的答案,我会标记它。 【参考方案1】:404 页面未找到
没有变体匹配给定的查询。
这条消息来自您的线路:
item_instance = get_object_or_404(Variation, id=item_id)
这意味着您没有与给定id
匹配的Variation
对象。
【讨论】:
以上是关于Django url 不接受参数的主要内容,如果未能解决你的问题,请参考以下文章