(转)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 %}
    
    将自己的这些内容加入相关文件,即可实现“清除购物车”功能
posted @ 2012-09-27 20:11  事件轮询,回不到过去  阅读(1821)  评论(7编辑  收藏  举报