【发布时间】:2018-07-26 18:13:53
【问题描述】:
我收到以下错误,我无法找出原因。
NoReverseMatch at /cart/
Reverse for 'add_to_cart' with arguments '('',)' not found. 1 pattern(s) tried: ['cart\\/add\\/(?P<product_id>[^/]+)$']
在对模板进行一些更改之前,我没有遇到任何问题。我还更改了产品的 pk 值,但我猜这不会影响任何事情?我还使用了clearsessions 以防万一这可能是问题所在。我认为 Django 是在说它找不到与我提供的 url 匹配的内容,但对我来说一切似乎都是正确的。我对我的代码进行了一些更改,并尝试将其恢复到以前的状态,但我仍然收到相同的错误消息。我会展示我的代码,如果你能告诉我我可能在哪里犯了错误,那就太棒了。
这是我的 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 %}
我使用表单将 url 与产品 url 链接并将其添加到我的购物车 这是我关联的 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 %}
如果你能帮助我,那就太棒了!
【问题讨论】:
-
尝试在你的模板中打印路由参数——
product.id和a.product.id,看看这些变量是否真的包含你所期望的。注意 Django 模板语言不会警告你变量或字典键不存在。
标签: django python-3.x session django-templates