2014-09-30 14 views
0

В моих взглядов я пытаюсь сохранить некоторую информацию с сессий Django, так что в моем views.py у меня есть это:Джанго сессии значение переменной теряется после обновления страницы

def shop_product(request, slug): 
    tshirt = Tshirt.objects.get(slug=slug) 

    request.session['items'] = [] 
    product = {} 

    if(request.GET.get('add')): 
     product['name'] = tshirt.title 
     product['price'] = tshirt.price_reg 
     request.session['items'].append(product) 
     request.session.modified = True 


    if(request.GET.get('clear')): 
     request.session['items'][:] = [] 
     request.session.modified = True 


    context = {'items' : request.session['items']} 


    return render(request, 'shop/shop_product.html', context) 

Я хотел бы, что «элементы» массив содержит и добавляет «продукт», который является dict, а также доступен в любом месте на веб-сайте (например, другие виды egshopping_cart), когда я обновляю страницу

Проблема в том, что когда я на одной странице/просмотре (только что описано выше), когда я обновляю страницу, у меня возникают проблемы с получением «элементов». также, если я перейду на другую страницу, а затем вернусь к исходной странице, значения в «элементах» исчезнут. Также значение не доступно ни на одной другой странице/представлении.

мой шаблон/html выглядит следующим образом:

<form action="#" method="get"> 
    <input type="submit" class="add" name="add"> 
    <input type="submit" value="CLEAR" class="clr" name="clear"> 
</form> 
+0

Вы явно очищаете элементы в начале функции. Я не думаю, что ты хочешь это сделать. –

+0

Да, это ошибка, которую я сделал, спасибо Даниэлю за указание на это. –

ответ

0

Изменить код:

def shop_product(request, slug): 
    tshirt = Tshirt.objects.get(slug=slug) 
    product = {} 

    if(request.GET.get('add') and request.GET.get('add')=='add'): 
     product['name'] = tshirt.title 
     product['price'] = tshirt.price_reg 
     request.session['items'].append(product) 
     request.session.modified = True 


    if(request.GET.get('clear') and request.GET.get('add')=='clear'): 
     request.session['items'] = [] 
     request.session.modified = True 


    context = {'items' : request.session['items']} 


    return render(request, 'shop/shop_product.html', context) 

Затем в HTML:

<form action="#" method="get"> 
    <input type="submit" value="add" class="add" name="add"> 
    <input type="submit" value="clear" class="clr" name="clear"> 
</form> 

Надеется, что это будет работать для вас.

+0

спасибо за ответ Yogesh, он сохраняет название Tshirt и цену Tshirt, и массив элементов остается постоянным, после обновления страницы ang, идущей по адресу http: // localhost: 8000/cart/содержит все словари с ценой Tshirt и Tshirt name :) Я думаю, что кнопка «clear» не освобождает массив «items», но это нормально, я думаю, что смогу это исправить, спасибо за ответ. –

+0

Chnage Эта строка: From if (request.GET.get ('clear') и request.GET.get ('add') == 'clear'): To if (request.GET.get ('clear') и request.GET.get ('clear') == 'clear'): –

+0

:) уже сделал это, но еще раз спасибо Yogesh! –

Смежные вопросы