2016-01-06 33 views
1

我在我的網站上創建了一個添加到購物車,它的工作原理非常棒。如何在Flask中添加多個項目到會話中

正在使用Jquery.getJSON使獲得所選擇的產品的價值要求,這裏是代碼:

$(function() { 
     $('a#process_menu').bind('click', function() { 
     /*var amount = document.getElementById('kale').value;*/ 
     $.getJSON('{{url_for("get_the_order")}}', { 
      menu_order: $(this).text(), price_order: $('input[name="kalkal"]').val(), 
     }, function(data) { 
      location.reload(); 
     }); 
     return false; 
     }); 
    }); 

這裏是接收請求的功能:

@app.route('/get_the_order') 
def get_the_order(): 

    global the_order_list 

    try: 

     the_order_list = [] 
     sum_list = [] 

     get_order = request.args.get('menu_order', 0, type=str) 
     get_price = request.args.get('price_order', 0, type=str) 

     the_order_list.append(get_order) 
     sum_list.append(get_price) 

     session['theOrder'] = ' '.join(the_order_list) 
     session['price'] = ' '.join(sum_list) 

     return jsonify(result=the_order_list + sum_list) 

    except Exception as e: 
     return redirect("menu") 

和這裏我有顯示所有產品的模板:

{% if entries_menu %} 
    {% for menu_ent in entries_menu %} 
     <div class="col-sm-6 col-md-3 col-lg-3 {{menu_ent.categorie}}"> 
      <div class="portfolio-item"> 
       <div class="hover-bg"> 
        <a id="process_menu"> 
         <div class="hover-text"> 
          <h4 id="title">{{menu_ent.title}}</h4> 
          <small id="price">{{menu_ent.price}}</small> 
          <div class="clearfix"></div> 
          <i class="fa fa-plus add_basket"></i> 
          <div class="counter-order"> 
           <div class="row"> 
            <div class="col-md-3"> 
             <form> 
              <fieldset> 
               <div class="form-group"> 
                <input id="kale" name="kalkal" class="form-control" type="number" value="1" min="1" max="999" /> 
               </div> 
              </fieldset> 
             </form> 
            </div> 
           </div> 
          </div> 
         </div> 
         <img src="../../static/{{menu_ent.path}}" class="img-responsive" alt="..." id="image-menu"> 
        </a> 
       </div> 
       <h4 class="brand bold">{{menu_ent.title}}</h4> 
       <span class="price pull-right">{{menu_ent.price}} </span><span class="amount pull-right"> {{menu_ent.amount}}</span> 
       <p id="descr">{{menu_ent.descr}}</p> 
      </div> 
     </div> 
    {% endfor %} 
{% endif %} 

這裏我做這個功能把所有的產品陣列中,並顯示在其上放置車中的頭旁存在的他們來說,這是所有的邏輯發生也文件,它應該表現出我想要什麼:

 {% if session.logged_in %} 

      {% if session.theOrder %} 
       <div class="confirm-cancel"> 
        <a href="{{url_for('flush')}}"><i class="fa fa-close fa-3x btn-danger"></i></a> 
        <a href="{{url_for('order_dish')}}"><i class="fa fa-check fa-3x btn-success"></i></a> 
       </div> 
      {% endif %} 

      <li class='main'><a href='/#main'><span>Main</span></a></li> 
      <li class="comfort"><a href='/#ckidki' ><span>Chief</span></a></li> 
      <li class="menu"><a href='/menu/' ><span>Menu</span></a></li> 
      <li class="order"><a href="/order/" ><span>Make an order</span></a></li> 
      <li class="contact"><a href='/#contact' ><span>Contact us</span></a></li> 
      <li class="last orders"><a href='/admin/' ><span>Admin</span></a></li> 

      {% if session.theOrder %} 

       <li class="basket"><i class="fa fa-shopping-basket fa-3x" style="color: #fff;"><p class="pull-left" id="bask" style="font-size: 19px; font-weight: 600; font-family: "Russo One",sans-serif;">{{session.get('theOrder')}} &nbspx{{session.get('price')}}</p></i></li> 

      {% else %} 

       <li class="basket"><i class="fa fa-shopping-basket fa-3x" style="color: #fff;"><p class="pull-left" id="bask" style="font-size: 19px; font-weight: 600; font-family: "Russo One",sans-serif;">0$ &nbsp&nbsp</p></i></li> 

      {% endif %} 
     {% endif %} 

問題是我無法獲得我在會議中選擇的所有產品,因此如果我查看了產品列表,我只能看到其中的一個,實際上,每次只能獲取點擊的項目。

請,任何建議如何使這項工作,無論如何請,任何幫助將不勝感激。

+0

數組可以在會話對象中傳遞。全局變量對這類事情不適用。會話變量就像全局變量。所以把它用於'the_order_list'。提示:檢查視圖函數中是否聲明瞭會話變量。如果不是,則申報。然後,通過會話對象實際上有一個全局變量。另外,爲什麼'嘗試''除了'塊,這似乎很麻煩。請記住; [最小,完整和可驗證](http://stackoverflow.com/help/mcve)發佈時的代碼示例。 – wgwz

+0

我宣佈會議,它的工作,謝謝:)。 – Reznov

回答

2

我修改你的代碼是這樣的:

the_order_list = session['theOrder'] 
    sum_list = session['price'] 

    the_order_list.append(get_order) 
    sum_list.append(get_price) 

    session['theOrder'] = the_order_list 
    session['price'] = sum_list 
1

我面臨着同樣的問題,終於得到了這個答案!

@app.route('/addtocart/') #加入購物車選項 
def addtocart(): 
id = request.args.get('id') 
if 'cart' not in session: 
    session['cart'] = [] # 
cart_list = session['cart'] 
cart_list.append(id) 
session['cart'] = cart_list # 
print(session) 

cart_list = session['cart']將返回一個空的列表。然後,在cart_list.append(id)之後,您得到一個長度爲1的列表。關鍵句子是session['cart'] = cart_list,如果您不這樣做,則列表的最大長度爲2.

+1

請解釋此代碼的工作原理。 –

+0

確定cart_list = session ['cart']將返回一個空列表。然後,在cart_list.append(id)之後,您得到一個長度爲1的列表。關鍵參數是session ['cart'] = cart_list#如果您不這樣做,那麼您的列表最大長度爲2。 –

相關問題