导航渲染 | 导航链接 | 导航子分类列表页渲染 | 添加购物车 |
1. 一对多的查询 根据 类型 ----> 商品 type.xxx_set.all() 对象.表_set.all
2. 多对一查询 根据 商品------>类型 goods.type.name 表明.字段.name
注意 表一: type 表二:goods
1. 调用导航分类
1.1 html 代码
分类链接 {% url 'goods:type_detail' foo.id %} -》 /type_detail/3
foo.id 是栏目id
goods:type_detail : 栏目链接 必须再url 定义空间 app_name = 'goods' :goods 模型名称
<li class="nav-item active"> {% for foo in type_list %} <li class="nav-item"> <a href='{% url 'goods:type_detail' foo.id %}' class="nav-link">{{ foo }}</a> </li> {% endfor %} </li>
1.2 views 代码
# 商品 列表页面 导航分类 def goods_list(request): # 商品列表 goods_list = models.Goods.objects.all() # 分类 type_list = models.Type.objects.all() content = { 'goods_list': goods_list, 'type_list': type_list, } return render(request, 'goods/goods_list.html', content)
1.3 url 代码
app_name = 'goods' from goods.views import goods_list, goods_add, type_detail from django.urls import path from goods import views urlpatterns = [ # 商品添加 path('goods_add/', goods_add, name='goods_add'), # 商品添加 path('goods_list/', goods_list, name='goods_list'), # 商品分类 #path('type_list/', views.type_list, name='type__list'), # 商品分类 列表 path('type_detail/<int:tid>', type_detail, name='type_detail'), ]
2 调用子类 里面所有产品
2.1 views 代码
# 分类 商品列表页面 detail 页面 def type_detail(request, tid): # 调用子类产品列表 type = models.Type.objects.get(id=tid) # 子类显示标题 title = str(models.Type.objects.filter(id=tid).first()) content = { 'type': type, 'title': title } return render(request, 'goods/type_detail.html', content)
2.2 html代码
{% for foo in type.goods_set.all %} <tr> <th scope="row">{{ foo.id }}</th> <td>{{ foo.title }}</td> <td>{{ foo.price }}</td> <td>{{ foo.store_num }}</td> <td>{{ foo.sale_num }}</td> <td>{{ foo.save_num }}</td> <td> <a href="" type="button" class="btn btn-primary btn-sm">编辑</a> <a href="" type="button" class="btn btn-danger btn-sm">删除</a> </td> </tr> {% empty %} <h1> 该分类下暂时无商品 </h1> {% endfor %}
3.1 添加购物车
html代码
1. 添加按钮
<button id="cart_list" class="btn btn-danger"> 购物车 </button> {% block myjs %} <script> // 添加购物车代码 需要借助jq $('#gouwu').click(function () { $.getJSON('{% url 'goods:cart_add' %}', {'id':{{goods.id}}},function (data) { if(data.msg == 'success'){ alert('添加购物车成功!') } }); }); // 查看购物车 $('#cart_list').click(function () { location.href={% url 'goods:cart_list' %} }); </script> {% endblock %}
2. 购物车列表
{% extends 'base.html' %} {% block content %} <div class="container"> <h2> {{ user.username }}- 购物车 </h2> <table class="table table-bordered"> <thead> <tr> <th scope="col">ID</th> <th scope="col">商品名称</th> <th scope="col">商品价格</th> <th scope="col">数量</th> <th scope="col">操作</th> </tr> </thead> <tbody> {% for foo in user.goods_set.all %} <tr> <th scope="row">{{ foo.id }}</th> <td>{{ foo.title }}</td> <td>{{ foo.price }}</td> <td>3</td> <td> <a href="{% url 'goods:cart_delete' %}?id={{ foo.id }}" type="button" class="btn btn-danger btn-sm">删除</a> </td> </tr> {% endfor %} </tbody> </table> </div> {% endblock %}
3.2 views 代码
# 购物车 添加商品 def cart_add(request): # 接受数据 id = request.GET.get('id') goods = models.Goods.objects.get(pk=id) # 无session 固定user user = models.User.objects.get(id=1) # 通过对象找 集合 #goods.users.add(user) # 方式1 商品里面添加用户 user.goods_set.add(goods) # 方式2 用户里面添加商品 return JsonResponse({'msg': 'success'}) # 显示购物车商品 def cart_list(request): # 无session 固定user user = models.User.objects.get(id=1) return render(request, 'goods/cart_list.html', {'user': user}) # 删除购物车 def cart_delete(request): id = request.GET.get('id') # 无session 固定user user = models.User.objects.get(pk=1) # 找到商品对象 goods = models.Goods.objects.get(pk=id) user.goods_set.remove(goods) return redirect('/cart_list/')
3.3 url 代码
# 购物车 path('cart_add/', cart_add, name='cart_add'), path('cart_list/', cart_list, name='cart_list'), path('cart_delete/', cart_delete, name='cart_delete'),
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下