Проблема передачи параметра размера из JavaScript в бэкенд Django

У меня возникла проблема с передачей параметра "size" из моей JavaScript-функции в мой Django-бэкенд. Вот соответствующий фрагмент кода из моего представления Django:

def get_product(request, slug):
    try:
        product = Product.objects.get(slug=slug)

        if request.GET.get('size'):
            size = request.GET.get('size')
            print(size)

        return render(request, "core/product_detail.html")

    except Exception as e:
        print(e)

А вот функция JavaScript:

function get_correct_price(size) {
    console.log(size);
    window.location.href = window.location.pathname + `?size=${size}`;
}

В моем HTML-шаблоне я вызываю функцию JavaScript с параметром size:

<button onclick="get_correct_price('{{ s.name }}')">{{ s.name }}</button>

Однако, когда я нажимаю на кнопку, параметр размера, похоже, не передается в бэкэнд. Я проверил, что функция JavaScript вызывается, и параметр размера правильно регистрируется в консоли.

Помогите, пожалуйста, определить, почему параметр размера не принимается в бэкенде? Любые соображения или предложения будут очень признательны. Спасибо!

  1. Сделайте имена ваших url уникальными.

  2. Сделайте параметры url такими, как показано ниже.

path("products/",product_list_view,name="product_list"),
path("product/<int:pid>/",product_detail_view,name="product_detail"),
path("product/<slug:slug>/",get_product,name="get_product")

ref

Сделать шаблон страницы ошибки и показывать эту страницу при исключении

def get_product(request, slug):
    try:
        product = Product.objects.get(slug=slug)

        if request.GET.get('size'):
            size = request.GET.get('size')
            print(size)

        return render(request, "core/product_detail.html")

    except Exception as e:
        print(e) 
        return render(request, "core/error_page.html")
  1. Очевидно, что в вашей модели нет поля с названием slug. Поэтому приведенный ниже код не будет работать.
product = Product.objects.get(slug=slug)
Вернуться на верх