使用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算术运算符实例详解
May 31 Python
Python正则表达式非贪婪、多行匹配功能示例
Aug 08 Python
python实现员工管理系统
Jan 11 Python
Python中数组,列表:冒号的灵活用法介绍(np数组,列表倒序)
Apr 18 Python
对Python3中bytes和HexStr之间的转换详解
Dec 04 Python
Python交互式图形编程的实现
Jul 25 Python
Python如何省略括号方法详解
Mar 21 Python
Jupyter Notebook的连接密码 token查询方式
Apr 21 Python
TensorFlow使用Graph的基本操作的实现
Apr 22 Python
python基于pexpect库自动获取日志信息
Feb 01 Python
Python xlwings插入Excel图片的实现方法
Feb 26 Python
Python爬虫实战之爬取携程评论
Jun 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桥接模式应用案例分析
2019/10/23 PHP
JavaScript Cookie的读取和写入函数
2009/12/08 Javascript
js对象的构造和继承实现代码
2010/12/05 Javascript
iframe 异步加载技术及性能分析
2011/07/19 Javascript
借助script进行Http跨域请求:JSONP实现原理及代码
2013/03/19 Javascript
基于jquery异步传输json数据格式实例代码
2013/11/23 Javascript
JS的document.all函数使用示例
2013/12/30 Javascript
JS遍历Json字符串中键值对先转成JSON对象再遍历
2014/08/15 Javascript
JavaScript中日期函数的相关操作知识
2016/08/03 Javascript
JavaScript中object和Object的区别(详解)
2017/02/27 Javascript
微信小程序 支付后台java实现实例
2017/05/09 Javascript
js学习心得_一个简单的动画库封装tween.js
2017/07/14 Javascript
推荐10款扩展Web表单的JS插件
2017/12/25 Javascript
Windows下用py2exe将Python程序打包成exe程序的教程
2015/04/08 Python
python2 与python3的print区别小结
2018/01/16 Python
Python request设置HTTPS代理代码解析
2018/02/12 Python
pyhton列表转换为数组的实例
2018/04/04 Python
详解django三种文件下载方式
2018/04/06 Python
Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法
2018/05/19 Python
Python使用pylab库实现绘制直方图功能示例
2018/06/01 Python
pyqt5实现按钮添加背景图片以及背景图片的切换方法
2019/06/13 Python
QML使用Python的函数过程解析
2019/09/26 Python
Python如何将函数值赋给变量
2020/04/28 Python
python 负数取模运算实例
2020/06/03 Python
浅谈Html5页面打开app的一些思考
2020/03/30 HTML / CSS
阿提哈德航空官方网站:Etihad Airways
2017/01/06 全球购物
纽约市的奢华内衣目的地:Anya Lust
2019/08/02 全球购物
工程监理应届生求职信
2013/11/09 职场文书
好的演讲稿开场白
2013/12/30 职场文书
升旗仪式主持词
2014/03/19 职场文书
入党积极分子个人总结
2015/03/02 职场文书
刑事上诉状范文
2015/05/22 职场文书
公司档案管理制度
2015/08/05 职场文书
《七律·长征》教学反思
2016/02/16 职场文书
商业计划书之服装
2019/09/09 职场文书
古诗之爱国古诗5首
2019/09/20 职场文书