Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 7, 2011 10:35:02

I159
От:
Зарегистрирован: 2010-12-09
Сообщения: 85
Репутация: +  0  -
Профиль   Отправить e-mail  

Передача списка в сессию.

Сделал представление, которое должно создавать список в сессии и записывать туда строки передаваемые через форму, с другой страницы, каждую следующую добавляя в список. И при повторном вызове переменной из сессии, без request.POST, выводить все строки переданные через форму.
Проблема: при вызове этой переменной без request.POST выводится только первая добавленная строка.
Вопрос: что сделано нае правильно? Как вывести все добавленные строки?

Форма:

<form action='/busket/' method='post'>
<input type='hidden' name='order' value='{{ the_model }} {{ gadget.brand_name }}'>
<input type='submit' value='добавить в корзину'>
</form>
Представление:
def busket(request): 
if request.method == 'POST' and 'order' in request.POST:
if 'bucket_list' not in request.session:#Bucket_list variable it's a joke - just like this pic)
request.session['bucket_list']=[]
order = request.POST['order']
bucket_list = request.session['bucket_list']
bucket_list.append(order)
elif 'bucket_list' in request.session:
bucket_list = request.session['bucket_list']
else:
empty_order = True
return render_to_response('busket.html', {'empty_order': empty_order,})
return render_to_response('busket.html', {'bucket_list': bucket_list,})
Шаблон:
{% if empty_order %}
<h3>Ваша корзина пуста</h3>
{% else %}
{% for x in bucket_list %}
{{ x }}
{% endfor %}
<a href='/order/'>Купить</a><br>
<a href='/catalog/'>Выбрать еще чё-нибудь</a>
{% endif %}



Отредактировано (Апрель 8, 2011 19:09:15)

Офлайн

#2 Апрель 16, 2011 14:41:58

romankrv
От:
Зарегистрирован: 2008-05-23
Сообщения: 513
Репутация: +  0  -
Профиль   Отправить e-mail  

Офлайн

#3 Апрель 16, 2011 16:51:05

I159
От:
Зарегистрирован: 2010-12-09
Сообщения: 85
Репутация: +  0  -
Профиль   Отправить e-mail  

Передача списка в сессию.

Уже победили.

#Django is optimising the sessions. By default, session saving only if it was modified.
#List are reference object, and it's determined by reference, so for Django it's remains the same object.
#Tuple are atomic object, so it's determined directly and session is modified every time when modified the tuple.
def busket(request):
if not isinstance(request.session.get('bucket_list', None), tuple):
request.session['bucket_list'] = ()
if request.method == 'POST' and 'the_model' in request.POST:
order = request.POST['the_model']
request.session['bucket_list'] += (order, )
if not request.session['bucket_list']:
empty_order = True
return render_to_response('busket.html', {'empty_order': empty_order,})
bucket_list = request.session['bucket_list']
return render_to_response('busket.html', {'bucket_list': bucket_list,})



Отредактировано (Апрель 16, 2011 21:41:13)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version