URL-адрес для получения с параметром для представления django

avatar
Romain BOBOE
9 августа 2021 в 05:24
268
2
0

У меня возникла проблема с кодом javascript при попытке использовать AJAX вместо ссылки href.

Мне нужно нажать на URL-адрес django, который выглядит следующим образом (Django 2.2):

path('one-time/<str:product_url>/', OneTimeProductView.as_view(), name='one_time_product')

исходный код в шаблоне django:

<a href="{% url 'one_time_product' product %}">{{product}}</a>

Теперь я хочу использовать ajax-вызов, чтобы весь процесс открывался внутри модального окна. В моем коде javascript моя функция выборки выглядит так:

   function handleAccess(){
    var url = "{%  url 'one_time_product' product %}" ;
    fetch(url, {
            method: "POST",
            headers: {
                "X-CSRFToken": '{{csrf_token}}',
                "Accept": "application/json",
                "Content-Type": "application/json"
            }
        })
        .then (response => {
            response.json();
        })
        .then (data => {
            console.log(data);
        })
};

Я знаю, что мне не хватает чего-то, связанного с параметрами в переменной url, но я просто не знаю, как добавить это правильно, чтобы соответствовать пути URL.

Это ошибка, которую я получаю, когда нажимаю кнопку

NoReverseMatch at /one-time/ Reverse для 'one_time_product' без аргументы не найдены. Пробовали 1 шаблон(ы): ['один раз\/(?P<product_url>[^/]+)\/$']

Как мне написать URL в функции выборки?

Я буду признателен, и любой может указать мне правильное направление здесь.

Спасибо

Источник
Juho Rutila
9 августа 2021 в 11:00
0

Кто вызывает handleAccess? Есть ли щелчок по исходному элементу ссылки?

Ответы (2)

avatar
Romain BOBOE
9 августа 2021 в 12:56
0

Это было сложно. Я решил это с помощью внутреннего разработчика.

var url = "{%  url 'one_time_product' product_url=0 %}".replace('0', {{ product }}) ;
avatar
Juho Rutila
9 августа 2021 в 05:36
0

У вас есть именованный параметр в определении URL (product_url).

Кроме того, вы должны использовать тег шаблона URL следующим образом:

var url = "{%  url 'one_time_product' product_url=product.url %}" ;

Измените product.url на фактический URL-адрес (или слаг) вашей модели продукта.

Romain BOBOE
9 августа 2021 в 09:55
0

не уверен, как отформатирован фактический URL-адрес. Из файла представления ожидается следующее: def get(self, request, product_url=None): site = get_current_site(request) if product_url: context = {} pro_access = "Anonymous" try :