当前位置: 首页 > java >正文

第14次(简要版)-商品详情

模型实现

1、在goods/models.py中,新增模型Guige_leixing、Guige,Guige_leixing模型代码放在shangpin模型上方,否则可能提示Guige_leixing不存在,

#Guige_leixing
class Guige_leixing(models.Model):# 服饰     白色,黑色# 电子产品    128g 256gname = models.CharField(max_length=100, verbose_name='规格类型')create_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")update_time = models.DateTimeField(auto_now=True, verbose_name="更新时间")def __str__(self):return str(self.name)class Meta:verbose_name = '商品规格类型'verbose_name_plural = verbose_name# Guige
class Guige(models.Model):name = models.CharField(max_length=100, verbose_name='规格')guige_leixing = models.ForeignKey(Guige_leixing, verbose_name='规格类型id', null=True, on_delete=models.PROTECT)create_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")update_time = models.DateTimeField(auto_now=True, verbose_name="更新时间")def __str__(self):return str(self.name)class Meta:verbose_name = '商品规格'verbose_name_plural = verbose_name 

修改shangpin类新增一个字段

guige_leixing = models.ForeignKey(Guige_leixing, on_delete=models.PROTECT, verbose_name='规格类型', null=True)

2、将模型注册到后台管理系统中,打开goods应用下的admin.py文件,添加内容如下

admin.site.register(Guige)
admin.site.register(Guige_leixing)

3、生成迁移文件并执行迁移,
python manage.py makemigrations
python manage.py migrate

刷新查看数据库可发现新表,goods_guige,goods_guige_leixing

4、打开后台管理系统,查看新增的数据库表
商品规格、商品规格类型
通过后台管理系统新增数据

动态加载数据

1、在模版文件夹下新建base.html,作为父模版,同时增加了首页的超链接

<html lang="en">
<head><meta charset="UTF-8"><title>基本模版</title>{% load static %}<link rel="stylesheet" type="text/css" href="{% static 'css/base.css' %}">
</head>
<body>
{% block top %}{#    头部添加背景图片#}<div style="text-align: right;height: 100px;width: 100%;background-image:url({% static 'images/backimage.jpg' %})">{#    添加背景色#}{#    <div style="text-align: right;height: 100px;width: 100%;background: lightblue">#}{% if user.is_authenticated %}<div>欢迎您:<em>{{ user.username }}</em><span>|</span><a href="{% url 'auth_app:logout' %} ">退出</a><span>|</span><a href="{% url 'auth_app:register' %}">注册</a><span>|</span><a href="{% url 'auth_app:info' %} ">用户中心</a><span>|</span><a href="{% url 'goods:index' %} ">首页</a>
{#                <span>|</span>#}
{#                <a href="{% url 'goods:carts' %} ">购物车</a>#}
{#                <span>|</span>#}
{#                <a href="{% url 'goods:myorder' %} ">我的订单</a>#}</div>{% endif %}</div>
{% endblock top %}
{% block main %}
{% endblock main %}
{% block footer %}
{% endblock %}
{% block script %}
{% endblock %}
</body>
</html>

2、修改模版文件夹下的index.html,为base.html的子模版,同时新增了一个导航栏用于显示商品类别,可进行检索

{% extends 'base.html' %}
{% load static %}
{% block main %}<div style="height: 30px;width: 100%;text-align: center;background:azure"><p style="width: 100%;height: 30px;margin-left:-400px">{% for leibie in leibie %}<span><a href="{% url 'goods:leixing' leibie.id %}"style="text-decoration: none;color: black">{{ leibie.name }} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a></span>{% endfor %}</p></div>{% for good in shangpin %}<div style="display: inline-block;width:350px;margin:50px">{#     <div style="float: left;width:350px;margin:50px" onclick=" window.open('www.baidu.com')">#}<img style="height: 300px;width: 250px" src="{{ MEDIA_URL }}/{{ good.image }}"><div><a style="text-decoration: none;" href="{% url 'goods:detail' good.id %}">{{ good.caption }}</a></div><label>{{ good.name }} </label><label style="color: coral">¥{{ good.price }}</label><img src="{% static 'images/addgwclogo.jpg' %}"style="width: 30px;height: 30px">{#            <a  style="width: 30px;height: 30px"> 加入购物车</a>#}{#             url 'commodity:detail' c.id#}{#        <a href="goods:detail/{{ good.id }}" style="width: 30px;height: 30px"> 加入购物车</a>#}</div>{% endfor %}
{% endblock main %}

3、为了实现商品类别检索,需在goods应用下的views.py文件,新增相应视图函数

@login_required()
def leixing(request, id):goods = shangpin.objects.filter(category_id=id)leibie = GoodsCategory.objects.all()return render(request, 'index.html', {'shangpin': goods, 'leibie': leibie})

并修改index函数为

@login_required()
def index(request):shangpin1 = shangpin.objects.all()leibie = GoodsCategory.objects.all()return render(request, 'index.html', {'shangpin': shangpin1, 'leibie': leibie})

4、同时,在goods应用下的urls.py文件文件中,新增相应路由规则

path('leixing/<int:id>',views.leixing,name='leixing'),

5、在goods/views,新增商品详情页的相应的视图函数

@login_required()  # 用户未登录时,转向登录界面
def detail(request, id):shangpin1 = shangpin.objects.filter(id=id).first()# print(shangpin1.guige_leixing_id)guige = Guige.objects.filter(guige_leixing_id=shangpin1.guige_leixing_id)return render(request, 'detail.html', {'shangpin': shangpin1, 'guiges': guige})

6、在templates模版文件夹下新增详情页detail.html,内容如下:

{% extends 'base.html' %}
{% load static %}
{% block main %}
<form><div class="con"><div class="a"><img src="{{MEDIA_URL}}/{{shangpin.image}}" style="width:300px;height:300px"></div><div class="b"><p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><strongname="huodongjia"><i></i>{{shangpin.price}}</strong></p><br><p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>{{shangpin.caption}}</p><br><p><span class="btn active">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{% for guige in guiges %}<label><input type="redio" value="{{guige.name}}" name="redia{{guige.id}}" readonly="readonly"style="width:100px"></label><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>{% endfor%}</p><br><p><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>-</span><span>+</span></p><br><p><input type="submit" value="加入购物车"><input type="submit" value="立即购买"></p></div><div style="margin:0 auto"><h4>详情</h4><div><img src="{{MEDIA_URL}}/{{shangpin.image}}" style="width:600px;height:600px"></div></div></div>
</form>
{% endblock main%}

7、在goods应用下的urls.py文件文件中,新增相应路由规则

path('detail/<int:id>',views.detail,name='detail'),
  1. css参考,在static文件夹下新建css目录,并在下面新建base.css,内容如下
body {font-size: 20px;/*background-color: #ebf8ff;*/
}* {margin: 0;padding: 0
}.con {width: 60%;height: 400px;margin: 0 auto;/*background: blue;*/
}.con div {width: 50%;height: 100%
}.a {/*background: lightcoral;*/float: left;text-align:center;
}.b {/*background: red;*/float: right;/*text-align:center*/
}

9.效果实现。打开浏览器查看分类效果,点击手机时,显示手机商品,点击电脑时显示电脑商品。

http://www.xdnf.cn/news/7563.html

相关文章:

  • PYTHON训练营DAY31
  • 使用MacPro 安装flutter开发环境 详细教程
  • 【SPIN】高级时序规范(SPIN学习系列--6)
  • DeepSpeed简介及加速模型训练
  • CentOS 7上部署BIND9 DNS服务器指南
  • OC5031B:重新定义 LED 恒流驱动的工业级芯片
  • 阿尔泰科技助力电厂——520为爱发电!
  • 【vue3结合element-plus】实现路由动态渲染
  • 文献解读:LigandMPNN
  • 高效选课系统:一键管理你的课程表
  • 查看数据库占用磁盘空间的方法
  • 湖北理元理律师事务所:科学债务规划如何平衡还款与生活
  • 现代健康养生:解锁生活中的科学防护密码
  • Pytorch针对不同电脑配置详细讲解+安装(CPU)
  • 【ubuntu】虚拟机连不上网,且网络中没有有线连接
  • 【数据结构】
  • win11下docker 的使用方案
  • HTML回顾
  • C语言:基础篇之常见概念
  • 如何在前端使用WebSockets进行实时数据通信?
  • 云原生架构下的企业 DevOps 治理实践:挑战、策略与落地路径
  • [自动化集成] 使用明道云上传附件并在Python后端处理Excel的完整流程
  • Ansible模块——管理100台Linux的最佳实践
  • 再来1章linux系列-19 防火墙 iptables 双网卡主机的内核 firewall-cmd firewalld的高级规则
  • HJ17 坐标移动【牛客网】
  • 【漫话机器学习系列】269.K-Means聚类算法(K-Means Clustering)
  • 健康养生指南:科学生活,活力常驻
  • BI行业分析思维框架 - 环保行业分析(一)
  • 【JavaWeb】MyBatis
  • Python类的力量:第六篇:设计模式——Python面向对象编程的“架构蓝图”