(轉)Django ====> 實戰學習篇十 讓頁面聯動起來


   源代碼下載地址:留言寫下郵箱地址,一天內會發送給你全部源代碼

    之前實現的購物車界面中,繼續購物和清除購物車的兩個按鈕並沒有關聯其他頁面,而且之前的產品目錄頁面的加入購物車按鈕同樣沒有關聯其他頁面,所以需要實現頁面聯動功能,進行如下分析:

  1. 首先是產品目錄的界面,我們希望按下按鈕“加入購物車”,就可以跳轉到購物車界面並且顯示(如果購物車有已經存在的產品,則在原來的基礎上數量+1);
  2. 設計的購物車鏈接形式如下: http://localhost:8080/depotapp/cart/add/xxx 其中xxx為產品的ID;
  3. 設置url: 
    (r'cart/add/(?P<id>[^/]++)/$')
    
    其中使用了python 正則表達式的”命名組“,語法是(?P<name>pattern)
    其中name是組的名字,而pattern是匹配模式,命名組的作用是將pattern匹配到的字符串按照name指定的參數傳遞給view函數,使用命名組的好處很多。
  4. 定義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
  5. 增加鏈接,即產品目錄界面加入到購物車界面的跳轉,根據django模板的url表達式可以自動生成view函數的跳轉鏈接,即使將來的URLconf修改,也不用修改模板了。在購物車模板中,將鏈接改為:
    {% url depotapp.views.store_view %}

    將產品目錄模板(store.html)的加入購物車鏈接改為:

    {% url depotapp.views.add_to_cart  item.id %}
  6. 最后實現清除購物車的功能,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 %}
    
    將自己的這些內容加入相關文件,即可實現“清除購物車”功能


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM