源代码下载地址:留言写下邮箱地址,一天内会发送给你全部源代码
之前实现的购物车界面中,继续购物和清除购物车的两个按钮并没有关联其他页面,而且之前的产品目录页面的加入购物车按钮同样没有关联其他页面,所以需要实现页面联动功能,进行如下分析:
- 首先是产品目录的界面,我们希望按下按钮“加入购物车”,就可以跳转到购物车界面并且显示(如果购物车有已经存在的产品,则在原来的基础上数量+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 %} 将自己的这些内容加入相关文件,即可实现“清除购物车”功能