【发布时间】:2014-02-02 11:12:40
【问题描述】:
如何使用 Django 的 Reverse 和可选参数来获取信息?我一直在努力
views.py:
def cartForm(request, prod):
if request.method=="POST":
quantity = request.POST.get('quantity', False)
if quantity:
add_to_cart(request, prod, quantity)
return HttpResponseRedirect(reverse("cart"))
#if no quantity indicated, display error message
return HttpResponseRedirect(reverse('products.views.info', kwargs={'prod': prod, 'error':True}))
def info(request, prod, error=False):
prod = Product.objects.get(id=prod)
return render(request, "products/info.html", dict(product = prod, error=error))
urls.py:
url(r'^(?P<prod>\d+)/', "products.views.info", name='info'),
我不断收到以下错误:
Reverse for 'products.views.info' with arguments '()' and keyword arguments '{'prod': u'2', 'error': True}' not found. 1 pattern(s) tried: ['products/(?P<prod>\\d+)/']
【问题讨论】:
-
您确定您的网址没有重复吗?匹配错误显示的模式与您的
urls.pysn-p 显示的模式不同。 -
@BurhanKhalid:Django 允许在部分 URL 下包含 url 模式;此模式包含在
'products/'下。 -
@MartijnPieters 我的意思是模式是
(?P\d+)(但后来我编辑了帖子,因为它实际上给出了正确的错误);然后我意识到当模式只映射到一个时,有 两个 关键字被传入;所以我的问题仍然存在。 -
@BurhanKhalid:这就是问题的症结所在; OP 期望
error参数在这里做什么?没有提及其他 URL 模式。