#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> может отсутствовать после рендеринга