我收到以下错误,而且我无法弄清楚原因。
NoReverseMatch at /cart/
Reverse for 'add_to_cart' with arguments '('',)' not found. 1 pattern(s) tried: ['cart\\/add\\/(?P<product_id>[^/]+)$']
在我对模板进行一些更改之前,我没有遇到任何问题。我也改变了我的产品pk值,但我猜这不应该影响任何东西?我也使用clearsessions
以防万一可能是问题。我认为Django说它无法找到我所提供的网址匹配,但一切似乎都适合我。我对我的代码进行了一些更改,并尝试将其还原到以前的状态,但我仍然收到相同的错误消息。我会展示我的代码,如果你能告诉我我可能犯了什么错误,那就太棒了。
这是我的product_detail.html模板
{% extends "buylist/Header.html" %}
{% block content %}
<p>{{product.name}}</p>
<p>{{product.price}}</p>
<form action="{% url 'add_to_cart' product.id %}" method="post">
{% csrf_token %}
<input type="number" name="quantity" min="1" max="{{product.quantity}}">
<button type="submit">add</button>
</form>
{% endblock %}
我使用表单将网址链接到产品网址并将其添加到我的购物车 这是我关联的urls.py和Views.py
urls.py
path('cart/', views.get_cart, name='cart'),
path('cart/add/<product_id>', views.add_to_cart, name='add_to_cart'),
path('product/<product_id>', views.product_detail, name='product_detail'),
views.py
def product_detail(request, product_id):
product = get_object_or_404(Product, id=product_id)
return render(request, 'buylist/product_detail.html', {'product':product})
def add_to_cart(request, product_id):
quantity = request.POST.get('quantity')
product = get_object_or_404(Product,id=product_id)
cart = Cart(request)
cart.add(product, product.price, quantity)
return redirect('cart')
def get_cart(request):
cart = Cart(request)
return render(request, 'buylist/cart.html', {'cart':cart})
这是我购物车的模板
cart.html
{% extends 'buylist/Header.html' %}
{% block content %}
<h1>Your Cart</h1>
{% for a in cart %}
<form action="{% url 'add_to_cart' a.product.id %}" method="post">
{% csrf_token %}
<h4><a href= '{{a.product.get_absolute_url}}'>{{a.product.name}}</a><small>
<input type="number" name="quantity" min="1" max="{{product.quantity}}" value="{{a.quantity}}">
<br><button type="submit">Update</button></small></h4>
<p>Price :
{{a.price}}</p>
</form>
{% endfor %}
<b>Total items: {{cart|length}}</b><br>
<b>Total Price: {{cart|length}}</b><br>
{% endblock %}
如果你可以帮助我,那就太棒了!
答案 0 :(得分:0)
使用product.id
模板标签时,请确保a.product.id
和url
的值已存在。
url
模板标记使用reverse
函数以及其他参数来创建网址。 (下面的代码片段供参考)
# Try to look up the URL. If it fails, raise NoReverseMatch unless the
# {% url ... as var %} construct is used, in which case return nothing.
url = ''
try:
url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)
except NoReverseMatch:
if self.asvar is None:
raise
如错误
所示反向'add_to_cart'并且找不到参数'('',)'....
参数元组的空字符串作为第一个参数,它与add_to_cart
提供的模式不匹配。