导航渲染 | 导航链接 | 导航子分类列表页渲染 | 添加购物车 |

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'),

 

posted @   我在春天等伱  阅读(34)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示