尝试查看购物车时出现NoReverseMatch Django错误 - 使用Python 3.6

时间:2018-02-15 21:25:56

标签: django python-3.x session django-templates

我收到以下错误,而且我无法弄清楚原因。

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 %} 

如果你可以帮助我,那就太棒了!

1 个答案:

答案 0 :(得分:0)

使用product.id模板标签时,请确保a.product.idurl的值已存在。

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提供的模式不匹配。