使用Django搭建网站实现商品分页功能


Posted in Python onMay 22, 2020

装好Django,写好index.html后,可以展示网页了。但是这只是静态页面,没有关联数据库,也不能分页展示商品信息。本节连接mongodb数据库(事先已准备好数据),从中取出几十条商品信息,每页展示4个商品信息,并具有翻页功能,做好的页面效果大致如下:

使用Django搭建网站实现商品分页功能

开始代码:

1、在settings.py(项目名称目录下)中,增加2段代码,分别是static文件夹位置和连接mongodb的代码:

STATIC_URL = '/static/'
STATICFILES_DIRS = (os.path.join(BASE_DIR,'static'),)  # 指定static文件夹位置

from mongoengine import connect
connect('ganji', host='127.0.0.1', port=27017)  # 连接ganji数据库

2、在models.py(本APP目录下)中,代码:

from django.db import models
from mongoengine import *
 
# Create your models here.
 
# 创建帖子信息类,继承自mongoengine的文件类<br data-filtered="filtered">class PostInfo(Document):  
  area = ListField(StringField())
  title = StringField()
  cates = ListField(StringField())
  price = StringField()
 
  pub_date = StringField()   # 数据集里面所有的字段都要有,就算不用也得列出来
  url = StringField()
  look = StringField()
  time = IntField()
  cates2 = StringField()
 
  meta = {'collection':'goods_info'}  # 定位好是goods_info数据集

3、在views.py(本APP目录下)中,代码:

from django.shortcuts import render
from sample_blog.models import PostInfo  # 导入已写好的数据结构
from django.core.paginator import Paginator # 导入分页器
 
# Create your views here.
def index(request):
  limit = 4 # 每页放几条帖子
  all_post_info = PostInfo.objects[:20] # 取前20个帖子的数据
  paginatior = Paginator(all_post_info, limit)  # 用分页器分页
  page_num = request.GET.get('page', 1) # 取request中的页码,取不到就为1
  loaded = paginatior.page(page_num) # 取page_num那一页的数据,一般是4条
 
  context = {
    # 首条固定的帖子信息
    'title': '三星 A5 白色',
    'des': '【图】三星 A5 白色 没有打开过 - 朝阳望京台式机/配件 - 北京58同城',
    'price': '1500',
    'area': ["朝阳", "望京"],
    'tag1': "北京二手市场",
    'tag2': "北京二手台式机/配件",
 
    # 每页更新的帖子信息
    'one_page_post': loaded
  }
  return render(request, 'index.html',context)

4、修改index.html文件,主要修改了有文字标注的部分:

<div class="posts">
       <h1 class="content-subhead">Pinned Post</h1>
 
       <!-- A single blog post -->
       <section class="post">
         <header class="post-header">
           <img class="post-avatar" alt="Tilo Mitra's avatar" height="48" width="48" src="{% static 'img/common/tilo-avatar.png' %}">





<!-- 修改了{{title}}等 -->
           <h2 class="post-title">{{ title }}</h2>
 
           <p class="post-meta">
             地区 <a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" class="post-author">{{ area }}</a> under <a class="post-category post-category-design" href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >{{ tag1 }}</a> <a class="post-category post-category-pure" href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >{{tag2}}</a>
           </p>
         </header>
 
         <div class="post-description">
           <p>
             {{ des }}|价格:{{ price }}
           </p>
         </div>
       </section>
     </div>
 
     <div class="posts">
       <h1 class="content-subhead">Recent Posts</h1><!-- 增加for循环,将one_page_post值带入 -->
       {% for item in one_page_post %}
         <section class="post">
           <header class="post-header">
             <img class="post-avatar" alt="Eric Ferraiuolo's avatar" height="48" width="48" src="{% static 'img/common/ericf-avatar.png' %}">
 
             <h2 class="post-title">{{ item.title }}</h2>
 
             <p class="post-meta">
               地区 <a class="post-author" href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >{{ item.area }}</a>分类<!-- 再增加一个for循环,把cates里的元素都展示出来 -->
               {% for cate in item.cates %}
                  <a class="post-category post-category-pure" href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >{{ cate }}</a>
               {% endfor %}
             </p>
           </header>
 
           <div class="post-description">
             <p>
               {{ item.title }}|价格:{{ item.price }}
             </p>
           </div>
         </section>
       {% endfor %}
 
     </div>



<!-- 增加本段div,实现页面底部可翻页 -->
      <div align="center">
       {% if one_page_post.has_previous %}
         <a href="?page={{ one_page_post.previous_page_number }}" rel="external nofollow" >< Pre</a>
       {% endif %}
         <span> {{ one_page_post.number }} of {{ one_page_post.paginator.num_pages }} </span>
       {% if one_page_post.has_next %}
         <a href="?page={{ one_page_post.next_page_number }}" rel="external nofollow" >Next ></a>
       {% endif %}
      </div>

5、附上urls.py(项目名称目录下)文件,本节中并没有修改,但也备注上:

from django.contrib import admin
from django.urls import path
from sample_blog.views import index
 
urlpatterns = [
  path('admin/', admin.site.urls),
  path('index/', index),
]

以上步骤完成后,启动服务(python manage.py runserver),访问http://127.0.0.1:8000/index/即可看到效果。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python脚本实时处理log文件的方法
Nov 21 Python
Python正则表达式知识汇总
Sep 22 Python
Python配置mysql的教程(推荐)
Oct 13 Python
Python实现PS滤镜Fish lens图像扭曲效果示例
Jan 29 Python
Python面向对象之继承代码详解
Jan 29 Python
PyTorch搭建一维线性回归模型(二)
May 22 Python
python关闭占用端口方式
Dec 17 Python
python 用 xlwings 库 生成图表的操作方法
Dec 22 Python
解决python图像处理图像赋值后变为白色的问题
Jun 04 Python
Python unittest discover批量执行代码实例
Sep 08 Python
jupyter notebook远程访问不了的问题解决方法
Jan 11 Python
Python OpenCV超详细讲解调整大小与图像操作的实现
Apr 02 Python
Tensorflow卷积实现原理+手写python代码实现卷积教程
May 22 #Python
Python实现发票自动校核微信机器人的方法
May 22 #Python
基于django micro搭建网站实现加水印功能
May 22 #Python
基于Tensorflow一维卷积用法详解
May 22 #Python
Python参数传递机制传值和传引用原理详解
May 22 #Python
python filecmp.dircmp实现递归比对两个目录的方法
May 22 #Python
关于keras.layers.Conv1D的kernel_size参数使用介绍
May 22 #Python
You might like
php 文章调用类代码
2011/08/11 PHP
ThinkPHP实现二级循环读取的方法
2014/11/03 PHP
PHP实现图片上传并压缩
2015/12/22 PHP
PHP实现动态添加XML中数据的方法
2018/03/30 PHP
php curl简单采集图片生成base64编码(并附curl函数参数说明)
2019/02/15 PHP
js 实现无干扰阴影效果 简单好用(附文件下载)
2009/12/27 Javascript
javascript中动态加载js文件多种解决办法总结
2013/11/15 Javascript
node.js中的fs.readFileSync方法使用说明
2014/12/15 Javascript
通过JS判断联网类型和连接状态的实现代码
2015/04/01 Javascript
Jquery检验手机号是否符合规则并根据手机号检测结果将提交按钮设为不同状态
2015/11/26 Javascript
JavaScript判断变量是否为数组的方法(Array)
2016/02/24 Javascript
jQuery简单验证上传文件大小及类型的方法
2016/06/02 Javascript
jQuery插件JWPlayer视频播放器用法实例分析
2017/01/11 Javascript
JS组件系列之MVVM组件构建自己的Vue组件
2017/04/28 Javascript
解决vue2.x中数据渲染以及vuex缓存的问题
2017/07/13 Javascript
纯js实现的积木(div层)拖动功能示例
2017/07/19 Javascript
javascript浏览器用户代理检测脚本实现方法
2017/10/27 Javascript
vue组件中使用iframe元素的示例代码
2017/12/13 Javascript
详解通过源码解析Node.js中cluster模块的主要功能实现
2018/05/16 Javascript
Angular设置别名alias的方法
2018/11/08 Javascript
vue webpack build资源相对路径的问题及解决方法
2020/06/04 Javascript
JavaScript浅层克隆与深度克隆示例详解
2020/09/01 Javascript
python检测是文件还是目录的方法
2015/07/03 Python
Python socket网络编程TCP/IP服务器与客户端通信
2017/01/05 Python
Python 实现淘宝秒杀的示例代码
2018/01/02 Python
使用Scrapy爬取动态数据
2018/10/21 Python
解决python中画图时x,y轴名称出现中文乱码的问题
2019/01/29 Python
与Django结合利用模型对上传图片预测的实例详解
2019/08/07 Python
python机器学习库xgboost的使用
2020/01/20 Python
使用Numpy对特征中的异常值进行替换及条件替换方式
2020/06/08 Python
html table呈现个人简历以及单元格宽度失效的问题解决
2021/01/22 HTML / CSS
德国传统玻璃制造商:Cristalica
2018/04/23 全球购物
美国韩国化妆品和护肤品购物网站:Beautytap
2018/07/29 全球购物
物流仓储实习自我鉴定
2013/09/25 职场文书
2015初一年级组工作总结
2015/07/24 职场文书
CSS3实现指纹特效代码
2022/03/17 HTML / CSS