首页 > 编程语言 >Python Django 制作商品列表展示

Python Django 制作商品列表展示

时间:2023-04-25 10:37:32浏览次数:42  
标签:goods name Python 列表 models good path import Django

新建名为 goods 应用

python manage.py startapp goods

修改 chapter1/settings.py 文件

INSTALLED_APPS 数组中添加 goods

image

在对象 TEMPLATES.OPTIONS 中添加 django.template.context_processors.media

image

添加三个常量

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]

image

修改 goods/models.py 文件

from django.db import models


# Create your models here.
class GoodsInfo(models.Model):
    name = models.CharField(max_length=30, verbose_name='商品名称')
    price = models.FloatField(verbose_name='商品价格', default=20.0)
    weight = models.IntegerField(verbose_name='商品重量', default=500)
    image = models.ImageField(upload_to='upload/%Y/%m', verbose_name='商品图片', default='upload/default.jpg')
    isnew = models.BooleanField(verbose_name='是否新品', default=False)
    details = models.CharField(verbose_name='商品详情', default='')

    def __str__(self):
        return self.name

修改 goods/views.py 文件

from django.shortcuts import render
from django.views.generic.list import ListView
from goods.models import GoodsInfo


# Create your views here.
class GoodsListView(ListView):
    model = GoodsInfo
    template_name = 'goods_list.html'
    context_object_name = 'goods'

添加 templates/goodslist.html 文件

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <title>商品列表</title>
    </head>
    <body>
        <div class="header" style="height: 100px"></div>
        <div class="main_wrap clearfix">
            <div class="l_wrap clearfix">
                <div class="new_goods">
                    <h3>新品推荐</h3>
                    <ul>
                        {% for good in goods %} {% if good.is_new %}
                        <li>
                            <a href="#"><img src="/media/{{good.image}}" /></a>
                            <h4><a href="#">{{good.name}}</a></h4>
                            <div class="price">¥{{good.price}}</div>
                        </li>
                        {% endif %} {% endfor %}
                    </ul>
                </div>
            </div>
            <div class="r_wrap clearfix">
                <div class="sort_bar">
                    <a href="#" class="active">默认</a>
                    <a href="#">价格</a>
                    <a href="#">人气</a>
                </div>
                <ul class="good_type_list clearfix">
                    {% for good in goods %} {% if good.is_new == False %}
                    <li>
                        <a href="#"><img src="/media/{{good.image}}" /></a>
                        <h4><a href="#">{{good.name}}</a></h4>
                        <div class="operate">
                            <span class="price">¥{{good.price}}</span>
                            <span class="unit">{{good.price}}/{{good.weight}}g</span>
                            <a href="#" class="add_goods" title="加入购物车"></a>
                        </div>
                    </li>
                    {% endif %} {% endfor %}
                </ul>
            </div>
        </div>
        <div class="footer" style="height: 100px"></div>
    </body>
</html>

修改 chapter1/urls.py 文件

from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
from django.contrib.staticfiles.urls import staticfiles_urlpatterns

urlpatterns = [
    path('users/', include('users.urls')),
    path('book/', include('book.urls')),
    path('admin/', admin.site.urls),
    path('goods/', include('goods.urls'))
]
urlpatterns += staticfiles_urlpatterns()
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

新建 goods/urls.py 文件

from django.urls import path, re_path
from . import views

app_name = 'goods'
urlpatterns = [
    path('goodslist/', views.GoodsListView.as_view()),
    re_path('gooddetail/(?P<goods_id>\d+)/$', views.detailView.as_view(), name='gooddetail')
]

修改 goods/admin.py 文件

from django.contrib import admin
from goods.models import GoodsInfo


# Register your models here.
class GoodsInfoAdmin(admin.ModelAdmin):
    list_display = ('id', 'name')


admin.site.register(GoodsInfo, GoodsInfoAdmin)

下载所需要的资源文件

image

依次创建 static\css 文件夹跟 media/upload 文件夹

把下载到的资源如下图放置

image

执行迁移操作

python manage.py makemigrations
python manage.py migrate
python manage.py runserver

启动 SqliteStudio 添加数据

image

INSERT INTO goods_goodsinfo (name, price, weight, image, isnew, details)
VALUES 
('苹果', 20, 500, 'upload/goods_detail.jpg', 1, '这是一个苹果的详情'),
('橙子', 25, 600, 'upload/goods_detail.jpg', 0, '这是一个橙子的详情'),
('香蕉', 15, 400, 'upload/goods_detail.jpg', 1, '这是一个香蕉的详情'),
('西瓜', 50, 3000, 'upload/goods_detail.jpg', 1, '这是一个西瓜的详情'),
('草莓', 30, 200, 'upload/goods_detail.jpg', 0, '这是一箱包含20个草莓的混合水果'),
('樱桃', 40, 300, 'upload/goods_detail.jpg', 1, '这是一箱包含30个樱桃的混合水果');

新建 templates/gooddeail.html 文件

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <title>商品详情</title>
        <link rel="stylesheet" href="/static/css/reset.css" />
        <link rel="stylesheet" href="/static/css/main.css" />
    </head>
    <body>
        <div class="header" style="height: 100px"></div>
        <div class="goods_detail_con clearfix">
            <div class="goods_detail_pic fl"><img src="/static/goods_detail.jpg" /></div>
            <div class="goods_detail_list fr">
                <h3>{{good.name}}</h3>
                <div class="prize_bar">
                    <span class="show_pirze">¥<em>{{goods.price}}</em></span>
                    <span class="show_unit">单 位: {{goods.weight}}g</span>
                </div>
            </div>
            <div class="goods_num clearfix">
                <div class="num_name fl">数 量:</div>
                <div class="num_add fl">
                    <input type="text" class="num_show fl" value="1" />
                    <a href="javascript:;" class="add fr">+</a>
                    <a href="javascript:;" class="minus fl">-</a>
                </div>
            </div>
            <div class="total">总价: <em>{{goods.price}}</em></div>
            <div class="operate_btn">
                <a href="javascript:;" class="buy_btn">立即购买</a>
                <a href="javascript:;" class="add_cart" id="add_cart">加入购物车</a>
            </div>
        </div>
        <div class="main_wrap clearfix">
            <div class="l_warp fl clearfix">
                <div class="new_goods">
                    <h3>新品推荐</h3>
                    <ul>
                        <li>
                            <a href="#"><img src="/static/goods001.jpg" /></a>
                            <h4><a href="#">进口柠檬</a></h4>
                            <div class="prize">¥3.90</div>
                        </li>
                        <li>
                            <a href="#"><img src="/static/goods002.jpg" /></a>
                            <h4><a href="#">玫瑰香葡萄</a></h4>
                            <div class="prize">¥16.80</div>
                        </li>
                    </ul>
                </div>
            </div>
            <div class="r_warp fl clearfix">
                <ul class="detail_tab clearfix">
                    <li class="active">商品介绍</li>
                    <li>评论</li>
                </ul>
                <div class="tab_content">
                    <dl>
                        <dt>商品详情</dt>
                        <dd>{{goods.details}}</dd>
                    </dl>
                </div>
            </div>
        </div>
        <div class="fotter" style="height: 100px;"></div>
    </body>
</html>

访问 http://127.0.0.1:8000/goods/gooddetail/1/

image

标签:goods,name,Python,列表,models,good,path,import,Django
From: https://www.cnblogs.com/huanfei/p/17351856.html

相关文章

  • 比较Python与Java在类的定义、继承、多态等方面的异同
    首先我来进行介绍Python与Java在类的定义、继承、多态等方面的异同1.python类和java类的使用一览java:publicclassCar{privateStringcolor;privateStringmodel;privateintyear;publicCar(Stringcolor,Stringmodel,intyear){......
  • 淘宝API接口对接(商品详情,评论,按图搜图,订单列表)代码封装,可高并发
    淘宝OpenAPI(Openapplicationprogramminginterface)是一套REST方式的开放应用程序编程接口。淘宝网根据自己提供的电子商务基础服务,抽象并做成一系列的API接口。通过这些接口,可以让外部用户能够通过程序的方式访问淘宝网的数据和平台。淘宝OpenAPI是淘宝开放平台的重要组成......
  • 【淘宝】商品列表页数据采集+商品优惠券数据采集
    采集场景在淘宝首页(https://s.taobao.com/)输入关键词搜索,采集搜索后得到的商品列表页数据。示例中关键词为【耐克】,可根据需求进行更换,同时支持自动批量输入多个关键词。 采集字段采集字段包括关键字文本值,产品标题,店铺名称,产品价格,付款人数,商品链接,店铺名,品牌,发货地等。采集结果......
  • Python基础【21】eval和exec的区别,_builtins
     1.eval执行有返回结果,exec执行但是没有返回结果.2.内建模块_builtins_: ......
  • mac+docker+jenkins,运行python自动化
    一、实现思路在mac本地安装DockerDesktop创建jenkins容器根据自动化项目依赖包构建python镜像(构建自动化python环境)运行新的python容器,执行jenkins从仓库中拉下来的自动化项目执行完成之后删除容器二、环境准备1、一台mac2、在mac上安装DockerDesktop,打开......
  • 【代理设计模式详解】C/Java/JS/Go/Python/TS不同语言实现
    简介代理模式(ProxyPattern)是一种结构型设计模式,用一个类来代理另一个类或几个类的功能。在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。延迟初始化(虚拟代理)。如果你有一个偶尔使用的重量级服务对象,一直保持该对象运行会消耗系统资源时,可使用代理模式。访问......
  • python_高级
    元组的初始化39行分割字符串,然后直接放到元组里面通过静态方法或类方法实例对象然后返回34行和40行,静态方法和类方法创建实例对象,然后返回34行和41行76和79行,一般来说,创建实例对象都是直接通过调用类名new一个实例对象,但是有时候,调用有些要传入__init__(......
  • 自定义Python版本ESL库访问FreeSWITCH
    环境:CentOS7.6_x64Python版本:3.9.12FreeSWITCH版本:1.10.9一、背景描述ESL库是FreeSWITCH对外提供的接口,使用起来很方便,但该库是基于C语言实现的,Python使用该库的话需要使用源码进行编译。如果使用系统自带的Python版本进行编译,过程会比较流畅,就不描述了。这里记录下使用自定义......
  • Python_12 多继承与多态
    一、查缺补漏1.self和super的区别:self调用自己方法,super调用父类方法当使用self调用方法时,会从当前类的方法列表中开始找,如果没有,就从父类中再找而当使用super时,则从父类的方法列表中开始找,然后调用父类的这个方法。2.Alt+回车下载包3.国内源地址,和镜像......
  • Python_11 类的方法
    一、查缺补漏1. 实例方法必须用类实例化对象()来调用,用类来调用时会执行,但是self中不是实例化类地址而是传的字符串二、类中的方法1. 实例方法1. 定义在类里面的普通方法(函数)2. 第一个参数必须是类实例,在方法调用的时候会自动传递,这个参数名称可以随便定义默认self3.......