源代碼下載地址:留言寫下郵箱地址,一天內會發送給你全部源代碼
之前實現的購物車界面中,繼續購物和清除購物車的兩個按鈕並沒有關聯其他頁面,而且之前的產品目錄頁面的加入購物車按鈕同樣沒有關聯其他頁面,所以需要實現頁面聯動功能,進行如下分析:
- 首先是產品目錄的界面,我們希望按下按鈕“加入購物車”,就可以跳轉到購物車界面並且顯示(如果購物車有已經存在的產品,則在原來的基礎上數量+1);
- 設計的購物車鏈接形式如下: http://localhost:8080/depotapp/cart/add/xxx 其中xxx為產品的ID;
- 設置url:
(r'cart/add/(?P<id>[^/]++)/$') 其中使用了python 正則表達式的”命名組“,語法是(?P<name>pattern) 其中name是組的名字,而pattern是匹配模式,命名組的作用是將pattern匹配到的字符串按照name指定的參數傳遞給view函數,使用命名組的好處很多。
- 定義view函數:/depotapp/views.py add_to_cart:
def add_to_cart(request,id): product = Product.objects.get(id = id) cart = request.session.get("cart",None) if not cart: cart = Cart() request.session["cart"] = cart cart.add_product(product) request.session['cart'] = cart 重新寫入 return view_cart(request) 根據url的id參數獲取產品,加入購物車,然后調用view_cart函數顯示購物車,這里面判斷session中是否有cart對象的寫法與view_cart的函數寫法一樣,不服和dry原則,以后再處理。 注意,從session中獲取對象后,該對象屬性的更改不能自動同步到session中,而是需要重新寫入session
- 增加鏈接,即產品目錄界面加入到購物車界面的跳轉,根據django模板的url表達式可以自動生成view函數的跳轉鏈接,即使將來的URLconf修改,也不用修改模板了。在購物車模板中,將鏈接改為:
{% url depotapp.views.store_view %}
將產品目錄模板(store.html)的加入購物車鏈接改為:
{% url depotapp.views.add_to_cart item.id %}
- 最后實現清除購物車的功能,url 和 view函數 模板中的url鏈接修改 實現如下:
url (r'cart/clean/', clean_cart), view函數 def clean_cart(request): request.session['cart'] = Cart() return view_cart(request) view_cart.html模板中的鏈接: {% url depotapp.views.clean_cart %} 將自己的這些內容加入相關文件,即可實現“清除購物車”功能