Url для получения с параметром для представления django
У меня возникла проблема с моим кодом javascript при попытке использовать AJAX вместо href ссылки.
Мне нужно попасть в django url, который выглядит следующим образом (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 моя функция fetch выглядит следующим образом:
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 for 'one_time_product' with no аргументов не найдено. 1 pattern(s) tried: ['one\-time\/(?P<product_url>[^/]+)\/$']
>
Как мне записать url в функции fetch ?
Я буду благодарен, и любой может указать мне правильное направление здесь.
Спасибо
Вы имеете именованный параметр в определении URL (product_url).
На мой взгляд, вы должны использовать тег url templatetag следующим образом:
var url = "{% url 'one_time_product' product_url=product.url %}" ;
Измените product.url
на фактический url (или slug) из вашей модели продукта.
Это был сложный вопрос. Я решил ее с помощью back-end dev.
var url = "{% url 'one_time_product' product_url=0 %}".replace('0', {{ product }}) ;