Обратный для ‘update_cart’ не найден. ‘update_cart’ не является допустимой функцией просмотра или именем шаблона

#django

#django

Вопрос:

Я новичок в django, и я разрабатываю одно приложение, в котором при нажатии я пытаюсь добавить товар в корзину. Чтобы выбрать продукт, который я использую "{%url 'update_cart' product1.slug%}"> в моем шаблоне, я включаю сюда свой код.

Это модель

 models.py
class cart(models.Model):
    product=models.ManyToManyField(products,blank=True)
    total=models.DecimalField(max_digits=100,decimal_places=2,default=0.00)

    def __unicode__(self):
        return "cart id: %s" %(self.id)
  

Это views

 views.py

def cartpage(request):
    c_data=cart.objects.all()[0]
    return render(request,'cart/cart.html',{'c_data':c_data})

def update_cart(request,slug):
    c_data = cart.objects.all()[0]
    try:
        product1=products.objects.get(slug=slug)
    except products.DoesNotExist:
        pass
    except:
        pass
    if not product1 in c_data.product.all():
        c_data.product.add(product1)
    else:
        c_data.product.remove(product1)
    return HttpResponseRedirect(reverse("cart"))
  

Это URL-адреса

 urls.py

path('cart/',views.cartpage,name='cart'),
path('cart/<slug:slug>',views.update_cart,name='update_cart')

  

Я создал модель корзины и зарегистрировал ее в admin … она работает должным образом даже в моем cart.html страница также работает, но если я пытаюсь добавить товар на странице «клик в корзине», она выдает ошибку.

пожалуйста, помогите

Комментарии:

1. Вы определили app_name в своем urls.py ?

2. Да, я уже определил имя приложения в URL-адресах .. но все равно оно не работает

Ответ №1:

в urls.py вашего приложения:

 # imports
app_name = your_app_name
urlpatterns = [
    # other urls
    path('cart/',views.cartpage,name='cart'),
    path('cart/<slug:slug>',views.update_cart,name='update_cart'),
]
  

в шаблонах URL-адреса вызовов по пространству имен приложений:

 "{% url 'your_app_name:update_cart' product1.slug %}"
  

См. здесь

Обновление: убедитесь, что это product1.slug есть. Если нет, поиск URL завершится ошибкой.

  "Reverse for 'update_cart' with arguments '('',)' not found. 1 pattern(s) tried: ['cart/cart/(?P<slug>[-a-zA-Z0-9_] )$'] "
  

означает, что на URL с именем не было передано никаких аргументов update_cart . Здесь аргумент равен product1.slug .

"{% url 'your_app_name:update_cart' product1.slug %}" кажется, вы прошли. Проверьте, есть ли slug для product1 объекта, поскольку product1.slug он не был отображен в шаблоне.

Комментарии:

1. Я уже определил имя приложения в URL и попытался изменить в template..as «{% url ‘cart:update_cart’ product1.slug %}»> но все еще не работает … и ошибка «Обратный для ‘update_cart’ с аргументами ‘(«,)’ не найден. попробован 1 шаблон (ы): [‘cart /корзина/(?P<slug>[-a-zA-Z0-9_] )$’] »

2. @swap окей. можете ли вы проверить, есть ли действительный URL в исходном коде вашей страницы после рендеринга. URL, соответствующий шаблону. cart/<slug> . <slug> может отсутствовать после рендеринга