Отправлять json из шаблона в представление django, а затем перенаправлять в это представление
У меня есть шаблон cat1.html с листингом товаров . Когда покупатель выбирает товар, создается объект со свойствами выбранного товара. Если клиент нажимает кнопку 'добавить в корзину', axios отправляет запрос + params строгифицированный объект продукта в /cart
ulElement.addEventListener('click', function(event) {
let targetClasses = Array.from(event.target.classList);
if(targetClasses.includes('dropdown-item')) {
/* code to build the item */
}
if(targetClasses.includes('btn-cart')) {
axios.get('/cart', { params: { item: JSON.stringify(item) } } );
}
});
пока все работает нормально, я могу распечатать объект/json с сервера, так что я знаю, что он прошел через него.
def cart(request):
item_dict = json.loads(request.GET.get('item'))
user_cart.append(item_dict)
print(user_cart); # this seems to work fine
/* return redirect('cart') this results in error TypeError(f'the JSON object must be str, bytes or bytearray, ' */
Проблема возникает, когда я пытаюсь добавить перенаправление в представление /cart. Я получаю ошибку
объект JSON должен быть str, bytes или bytearray, а не NoneType
.
Я пытался обойти это, используя window.location.href, а также обернув кнопку в , но я получаю ту же ошибку, поэтому у меня есть ощущение, что я использую неправильный подход.
Вы не можете отправлять редирект в качестве ответа ajax. Вы можете отправить обратное сообщение или статус, и вы должны работать с этим на переднем плане в функции обратного вызова успеха.
Это происходит потому, что вы перенаправляете на представление 'cart' без JSON в параметрах. Поэтому происходит успешное перенаправление, но затем в перенаправленном экземпляре параметр 'item' равен None, поэтому json.loads() выбрасывает ошибку.