Url Pattern дает мне ошибку несоответствия url

url(r'^(?P<pk>\d+)/remove/$',
        WishlistRemoveView.as_view(), name='wishlist_remove'),


<form action="{% url 'wishlist_remove' pk=item.wishlistitem_set.all.0.pk %}" method="post">
    {% csrf_token %}
    <input type="submit" value="{% trans 'Remove' %}">
</form>

Когда я нажимаю на кнопку удаления, я получаю следующую ошибку:-

NoReverseMatch at /product/7/
Reverse for 'wishlist_remove' with keyword arguments '{'pk': ''}' not found. 1 pattern(s) tried: ['(?P<pk>\\d+)/remove/$']

Что-то не так

Причина, по которой это не работает, заключается в том, что для данного item ваш wishlistitem_set.all() пуст, поэтому нет WishlistItem для удаления.

Вы можете сделать чек с:

{% with wishlistitems=item.wishlistitem_set.all %}
  {% if wishlistitems %}
    <form action="{% url 'wishlist_remove' pk=wishlistitems.0.pk %}" method="post">
      {% csrf_token %}
      <input type="submit" value="{% trans 'Remove' %}">
    </form>
  {% endif %}
{% endwith %}

Однако немного "странно" работать только с первым элементом: почему должна быть кнопка для первого элемента, а не для второго, например?


Note: As of , url(…) [Django-doc] is deprecated in favor of re_path(…) [Django-doc] and has been removed in . Furthermore a new syntax for paths has been introduced with path converters: you use path(…) [Django-doc] for that.

Вернуться на верх