8.Django大型电商项目之商品添加分页

news2024/11/23 9:08:19

1.添加分页

在这里插入图片描述

添加分页在Django中使用自带分页器paginator

1.1 配置setting

settings中配置分页数量

# 每页显示记录条数
PER_PAGE_NUMBER = 8

1.2 配置views

  1. 完成分页栏
  2. 使用paginator创建对象,返回选中条数
from django.shortcuts import render
from goodsapp.models import *
from django.core.paginator import Paginator
from netshop import settings
# Create your views here.
# 新增 1 2 3 4 5 这样的分页栏函数
def get_page_range_by_page_and_max_page(page, max_page, num=10):
    min = page-int(num/2)
    min = min if min>1 else 1
    max = min + num - 1
    max = max if max < max_page else max_page
    return range(min, max+1)
# 商品列表页
def index(request,categoryid=2, page_num=1):
    # 1. 获取所有分类
    categoryList = Category.objects.all().order_by('id')

    # 2. 获取当前分类下的所有商品
    goodsList = Goods.objects.filter(category_id = categoryid)

    # 添加参数(对哪个列表分页,每页多少条)
    paginator = Paginator(object_list=goodsList, per_page=settings.PER_PAGE_NUMBER)
    # 获取当前page_num页的数据
    goods_page = paginator.get_page(page_num)

    # 设置传递参数
    context = {
        'categoryList':categoryList,
        'currcategoryid':categoryid,
        'goods_page': goods_page, # 修改获取第几页的数据
        'page_range':get_page_range_by_page_and_max_page(page_num, paginator.num_pages), # 第一个参数是当前页,第二个是总共多少页
        
    }
    return render(request,'goodsapp/index.html',context=context)


1.3 子应用urls配置

# netshop\goodsapp\urls.py
from django.contrib import admin
from django.urls import path,include
from goodsapp import views
urlpatterns = [
    path('',views.index),
    path('category/<int:categoryid>/page/<int:page_num>/',views.index),
]

1.4 templates模板配置

  1. 获取views当前页面的显示哪几条数据
  2. 添加跳转上下页,直接跳转第几页的功能
  3. 当前页面被选中加样式
<!-- netshop\goodsapp\templates\goodsapp\index.html -->
{% extends 'base.html' %}
{% block title %} 商品列表页 {% endblock %}
{% block headercss %}
<style>
    .redA{
        color: red;
        font-size: 26px;
    }
</style>

{% endblock %}
{% block main %}
<div class="classes">
    <ul class="classes-items">
        {% for category in categoryList %}
            <li class="items {% if category.id == currcategoryid %} active {% endif %} ">
                <a href="http://127.0.0.1:8000/category/8">{{category.cname}}</a>
            </li>
        {% endfor %}
    </ul>
</div>
<div class="goods-model">
    <div class="goods-content">
        {% for goods in goods_page %}
            <div class="good">
                <a href="http://127.0.0.1:8000/goodsdetails/4">
                    <img src="{{ goods.getImgUrl }}" width="285px" height="285px">
                    <p class="name">{{ goods.gname }}</p>
                    <div class="price">
                        <i></i>
                        <p class="big">{{ goods.price }}</p>
                        <s>¥{{ goods.oldprice }}</s>
                    </div>
                    <div class="sale">
                        特卖
                    </div>
                </a>
            </div> 
        {% endfor %}
    </div>
</div>

<div id="pager" style="text-align: center; font-size: 16px; overflow: hidden; margin-top: 10px;">
    <!-- 判断是否含有上一页,利用goods_page对象中内置的方法 -->
    {% if goods_page.has_previous%}
        <!-- 跳转到哪个分页 -->
        <a href="/category/{{currcategoryid}}/page/{{goods_page.previous_page_number}}" style="display: inline-block; padding: 5px; margin: 5px;">上一页</a>
    {% endif %}

    {% for pg in page_range %}
        {% if pg == goods_page.number %}
            <strong class="redA">{{pg}}</strong>
        {% else %}
        <a href="/category/{{currcategoryid}}/page/{{pg}}" style="display: inline-block; padding: 5px; margin: 5px;">{{pg}}</a>
        {% endif %}
    {% endfor %}

    <!-- 判断是否含有下一页,利用goods_page对象中内置的方法 -->
    {% if goods_page.has_next %}
        <!-- 跳转到哪个分页 -->
        <a href="/category/{{currcategoryid}}/page/{{goods_page.next_page_number}}" style="display: inline-block; padding: 5px; margin: 5px;">下一页</a>
    {% endif %}

    
    
</div>
{% endblock %}

{% block footerjs %}
<script>
    $('#pager').css({'text-align':'center','font-size':'16px','overflow':'hidden','margin-top':'10px'})
    $('#pager a').css({'display':'inline-block','padding':'5px','margin':'5px'})
</script>
{% endblock %}

base.html

<!-- netshop/templates/base.html -->
<!DOCTYPE html>
<html lang="en">
    {% load static %}
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>{% block title %}{% endblock %}</title>
    <link rel="stylesheet" href="{% static 'css/login.css' %}">
    <link rel="stylesheet" href="{% static 'css/index.css' %}">
    <link rel="stylesheet" href="{% static 'css/detail.css' %}">
    <link rel="stylesheet" href="{% static 'css/carts.css' %}">
    <link rel="stylesheet" href="{% static 'css/reset.css' %}">
    <link rel="stylesheet" href="{% static 'css/mygxin.css' %}">
    <script src="{% static 'js/jquery.min.js.下载' %}"></script>
    <script src="{% static 'js/carts.js' %}"></script>
    {% block headerjs %}{% endblock %}
    {% block headercss %}{% endblock %}
</head>
<body>
    {% include 'top.html' %}
    {% block main %}{% endblock %}
</body>
{% block footer %}{% endblock %}
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/89965.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

桶排序算法

题目 代码1&#xff1a; #include <stdio.h> int main() {int sz0;scanf("%d",&sz);int arr[sz];//输入int i0;for (i0;i<sz;i){scanf("%d",&arr[i]);}//删除多余相同元素int j0;int k0;for (i0;i<sz;i){if (i0){arr[j]arr[i];}else{…

MyBatis批量保存(Oracle)MyBatis批量插入时,组装SQL过长会有问题,一定要根据批量插入数据量进行切割,再批次提交保存!!!

MyBatis批量保存&#xff08;Oracle&#xff09; oracle 批量插入与mysql 的批量插入的方式不同 insert into tablename()values(),(),(); ---这个是mysql 的批量插入形式 insert all into tablename() values() into tablename() values() -------这个是Oracle批量插入形式 你…

大数据测试 - 数仓测试

前言 对于数据仓库的测试来说底层的系统会有很多有自建的集群使用 spark 或者 flink 测试&#xff0c;也有很多直接使用云厂商的产品比如 datworks 等等&#xff0c;再这里我想分享下抛开环境&#xff0c;只对数据仓库测试的一些小心得。 数仓分层设计 标准数仓分为 ODS,DWD…

java计算机毕业设计基于安卓Android的微整形美容app

项目介绍 首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要包罗软件架构模式、整体功能模块、数据库设…

前缀和问题

前缀和 一维二维 ac795. 前缀和【一维】 输入一个长度为 nn 的整数序列。 接下来再输入 mm 个询问&#xff0c;每个询问输入一对 l,rl,r。 对于每个询问&#xff0c;输出原序列中从第 ll 个数到第 rr 个数的和。 输入格式 第一行包含两个整数 nn 和 mm。 第二行包含 nn…

基于android的资源文件管理器

软 件 学 院 毕业实训报告 课题名称&#xff1a; android资源管理器 专 业&#xff1a; 软件设计&#xff08;游戏开发方向&#xff09; 班 级&#xff1a; 学 号&#xff1a; 学生姓名&#xff1a; 指导教师&#xff1a; 年 月 日 摘 要 相信大家对Android的发展历史…

Nacos-配置中心,特性,启动,集成mysql,快速入门

Nacos - 配置管理 目录Nacos - 配置管理1. 什么是配置中心1.1 什么是配置1.2 什么是配置中心2 Nacos****简介2.1 主流配置中心对比2.2 Nacos****简介2.3 Nacos****特性3 Nacos 快速入3.1 安装 Nacos Server3.1.1 预备环境准备3.1.2 下载源码或者安装包3.1.3 启动服务器3.1.4 OP…

HTML班级网页设计 基于HTML+CSS+JS制作我们的班级网页(web前端学生网页设计作品)

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

计算机毕业设计---java+springboot宠物商城系统

一、项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot Maven mybatis Vue 等等组成&#xff0c;B/…

光栅尺差分计数/频率5MHz/磁栅尺编码器差分脉冲计数采集模块

产品特点&#xff1a; ● 光栅尺磁栅尺解码转换成标准Modbus RTU协议 ● 光栅尺5V差分信号直接输入&#xff0c;4倍频计数 ● 模块可以输出5V的电源给光栅尺供电 ● 高速光栅尺磁栅尺计数&#xff0c;频率可达5MHz ● 支持4个光栅尺同时计数&#xff0c;可识别正反转 ● …

Oracle函数

目录 一、数值函数 1.ABS(value)&#xff1a;绝对值 2.CEIL(value)&#xff1a;向上取整 3.FLOOR(value)&#xff1a;向下取整 4.ROUND(value)&#xff1a;四舍五入 5.MOD(value(被除数),divisor(除数))&#xff1a;求模 6.SIGN(value)&#xff1a;判断正(0)负(-1)和零(…

隐私计算学习笔记

目录 安全保护技术和应用总结 基础隐私计算技术在联邦学习中的应用 参考书籍 图片来源&#xff1a; https://www.basebit.ai/en/Statics/Images/en/dbys.png 隐私计算技术的产生是互联网、大数据以及区块链等技术发展到一定阶段的必然成果&#xff0c;以下为大家分享读书笔…

01-32-spring5-bean-ioc-aop

01-spring5&#xff1a; spring 1、spring概念 1、什么是spring及优点 Spring框架使Java EE应用程序的开发更加简捷&#xff0c;通过使用POJO为基础的编程模型促进良好的编程风格。 轻量级&#xff1a;Spring在大小和透明性方面绝对属于轻量级的&#xff0c;基础版本的Spr…

【推荐系统学习笔记】-- 2、特征工程

1、可利用的特征 1.1 用户行为特征 显性反馈行为&#xff1a;点赞、评分、评价等隐形反馈行为&#xff1a;点击、浏览、播放、加入购物车等 1.2 用户关系数据 显性&#xff1a;关注、好友关系隐形&#xff1a;点赞、共同观影使用Graph Embedding生成用户和物品的Embedding …

[附源码]Python计算机毕业设计SSM基于web的托育园管理系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

蓝牙遥控小车基础篇

开发环境&#xff1a; STM32F103R8T6最小系统板&#xff08;IO顺序引出&#xff09; 3D建模蓝牙遥控小车STL 蓝牙遥控小车纯HAL库代码 TP-Bluetooth-Car.apk蓝牙apk 原理&#xff1a;&#xff08;写代码前必须要知道模块的参数&#xff09; 蓝牙模块HC-05使用指南 HC-05蓝…

C++入门——函数重载

C入门——函数重载与缺省 先说说什么是缺省 大家生活中都知道什么关于缺省这个词的例子吗&#xff1f; 肯定是一头雾水&#xff0c;没事我举一个例子&#xff0c;给大家解释一下。 假如小菜是一个舔狗&#xff0c;他天天跟女神买早餐、嘘寒问暖。可是女神还是天天不为所动&am…

基于LabVIEW单片机的抢答器的设计

实训题目&#xff1a;基于LabVIEW单片机的抢答器的设计 1 系统设计 1.1 设计要求 1.1.1 设计任务 设计一个基于LABVIEW的6人抢答器&#xff0c;实现抢答器的基本功能。 1.1.2 性能指标要求 需要自己设计电路并焊接电路板。基本要求&#xff1a;有一个主持人控制开关和…

【华为机试真题详解】投篮大赛【2022 Q4 | 100分】

文章目录 前言题目描述示例 1题目解析参考代码前言 《华为机试真题详解 Python实现》专栏含牛客网华为专栏、华为面经试题、华为OD机试真题。 如果您在准备华为的面试,期间有想了解的可以私信我,我会尽可能帮您解答,也可以给您一些建议! 本文解法非最优解(即非性能最优)…