Как перенаправить на ту же / текущую страницу в Django? - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь разработать сайт для интернет-магазина с Django. На мой взгляд, когда он добавляет новый продукт в корзину, я хочу дать сообщение об успехе, но, поскольку у меня есть нумерация страниц, он всегда перенаправляется на мою домашнюю страницу, что очень раздражает пользователя.

Когда я на своей странице = 2, я хочу добавить товар и остаться на этой странице, а не перенаправляться на домашнюю страницу.

Мои views.py:

from django.shortcuts import render, redirect, HttpResponseRedirect, Http404
from products.models import Product
from .models import Cart, CartItem
from django.contrib import messages
from django.urls import reverse
from django.utils.safestring import mark_safe


def cart(request):
    try:
        the_id = request.session['cart_id']
    except:
        the_id = None
    if the_id:
        cart = Cart.objects.get(id=the_id)
        context = {"cart":cart}
    else:
        empty_message = "Your cart is empty, please keep shopping."
        context = {"empty": True, "empty_message": empty_message}

    template = 'shopping_cart/cart.html'
    return render(request, template, context)



def add_to_cart(request, slug):
    request.session.set_expiry(120000)
    try:
        qty = request.GET.get('qty')
        update_qty = True
    except:
        qty = None
        update_qty = False

    try:
        the_id = request.session['cart_id']
    except:
        new_cart = Cart()
        new_cart.save()
        request.session['cart_id'] = new_cart.id
        the_id = new_cart.id

    cart = Cart.objects.get(id=the_id)
    try:
        product = Product.objects.get(slug=slug)
    except Product.DoesNotExist:
        raise Http404
    except:
        pass 

    cart_item, created = CartItem.objects.get_or_create(cart=cart, product=product)
    messages.success(request, f'Product added to Cart')
    return redirect('myshop-home')

    if update_qty and qty:
        if int(qty) == 0:
            cart_item.delete()
        else:
            cart_item.quantity = qty
            cart_item.save()
    else:
        pass
    # if not cart_item in cart.items.all():
    #     cart.items.add(cart_item)
    #     messages.success(request, mark_safe("Product added to cart. Go to <a href='cart/'>cart</a>"))
    #     return redirect('myshop-home')
    # else:
    #     cart.items.remove(cart_item)
    #     messages.success(request, mark_safe("Product removed from cart"))


    new_total = 0.00
    for item in cart.cartitem_set.all():
        line_total = float(item.product.price) * item.quantity
        new_total += line_total

    request.session['items_total'] = cart.cartitem_set.count()
    cart.total = new_total
    cart.save()

    return HttpResponseRedirect(reverse('cart'))

1 Ответ

0 голосов
/ 31 марта 2020

Возможно попробуйте это:

return redirect(request.path)

или:

return redirect(request.build_absolute_uri())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...