Форум сайта python.su
Сделал представление, которое должно создавать список в сессии и записывать туда строки передаваемые через форму, с другой страницы, каждую следующую добавляя в список. И при повторном вызове переменной из сессии, без 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)
Офлайн
Офлайн
Уже победили.
#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)
Офлайн