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

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

开始代码:

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/即可看到效果。

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

(0)

相关推荐

  • 基于django micro搭建网站实现加水印功能

    用django_micro搭建的,给图片加文字水印的前端+后端功能开发: 大体功能是:输入水印的文字,选择要加水印的图片,最后生成加好水印的图片. 可在一页中显示多个加好水印的图片,且可点击显示或隐藏图片的缩略图.实现效果如下: 代码如下 from django_micro import route, run, configure from django.http import HttpRequest, HttpResponse from dominate.document import doc

  • Python django搭建layui提交表单,表格,图标的实例

    利用layui制作与众不同的感谢表单,表格 layui极大的提高了前端开发效率,它极具个性的样式等等都非常吸引人,接下来我将为大家展示如何利用Python的django框架与layui制作极富个性的表单与数据表格 注:忽略创建项目,配置文件,若这部分内容不太明白,参考教你使用Django搭建一个基金模拟交易系统,里面会教你从项目创建到最终运行的完整流程. 第一步:在templates目录下新建一个index.html文件(文件内容根据自己的业务需求在layui官网复制即可),同时改变其布局只需将

  • python+Django+pycharm+mysql 搭建首个web项目详解

    本文实例讲述了python+Django+pycharm+mysql 搭建首个web项目.分享给大家供大家参考,具体如下: 前面的文章记录了环境搭建的过程,本节记录首个web项目调试 首先检查安装的模块,输入dos命令 pip list, 会显示已安装的模块,看是否有Django,PyMySQL模块 C:\Users\Administrator\PycharmProjects>pip list DEPRECATION: The default format will switch to colu

  • nginx+uwsgi+django环境搭建的方法步骤

    环境搭建 1.安装uwsgi.nginx和django apt install nginx pip install uwsgi pip install django 2.测试uwsgi和nginx的连接 PS:下面的例子采用的是 unix socket 的链接发送 创文件foobar.py def application(env, start_response): start_response('200 OK', [('Content-Type','text/html')]) return [b

  • python3.6+django2.0+mysql搭建网站过程详解

    之前用过python2.7版本,改用3.6版本发现很多语法发生了变化. 在templates里新建一个html文件,命名为index.html作为要测试的界面, 新建一个应用,Tools->Run manage.py Task 输入startapp+应用名称 然后对urls进行配置,配置如下: from django.conf.urls import url from . import views urlpatterns = [ url(r'^index/', views.index), ] 在

  • python框架Django实战商城项目之工程搭建过程图文详解

    项目说明 该电商项目类似于京东商城,主要模块有验证.用户.第三方登录.首页广告.商品.购物车.订单.支付以及后台管理系统.项目开发模式采用前后端不分离的模式,为了提高搜索引擎排名,页面整体刷新采用jinja2模板引擎实现,局部刷新采用vue.js实现. 项目运行机制如下: 项目搭建 工程创建 项目使用码云进行源代码版本控制,在码云创建好后直接克隆到本地即可,然后在项目根目录下执行virtualenv venv创建虚拟环境,source venv/bin/activat激活虚拟环境后,安装djan

  • 使用Django搭建一个基金模拟交易系统教程

    亲手教你如何搭建一个基金模拟系统(基于Django框架) 第一步:创建项目.APP以及静态文件存储文件夹 django-admin startproject Chongyang django-admin startapp Stock # Chongyang文件夹里面操作 在chongyang项目创建statics和templates两个文件夹 第二步:配置Setting.py文件 INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib

  • 详解使用django-mama-cas快速搭建CAS服务的实现

    当公司有多条产品线,或者有多个不同的应用的时候,每次都做登录是个非常烦人的事情.(原谅我没有从SSO的角度看这个问题..对我来说能偷懒少写点东西最实在).为什么需要每次都做个登录?做登录就意味着我的系统还得要有用户.角色.菜单管理,天啊!RBAC又来了(摊手). 当我新做一个应用的时候,我最希望的就是这些东西都是现有的,接入一下就可以用了,一方面来说省事,另外一方面来说,也节省测试的时间.从服务的角度来看,认证这种动作也应该被划分到一个具体的服务里面去. 为什么没有用Jasig 无论是OSC还是

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

    装好Django,写好index.html后,可以展示网页了.但是这只是静态页面,没有关联数据库,也不能分页展示商品信息.本节连接mongodb数据库(事先已准备好数据),从中取出几十条商品信息,每页展示4个商品信息,并具有翻页功能,做好的页面效果大致如下: 开始代码: 1.在settings.py(项目名称目录下)中,增加2段代码,分别是static文件夹位置和连接mongodb的代码: STATIC_URL = '/static/' STATICFILES_DIRS = (os.path.j

  • Django框架实现的简单分页功能示例

    本文实例讲述了Django框架实现的简单分页功能.分享给大家供大家参考,具体如下: 前面一篇<Django开发的简易留言板>写了个简单的留言板,如果数据量太多的话在一页显示就不那么友好了,本文就是做一个分页显示. 代码在上一篇的基础上修改. 导入分页模块并修改views #只需修改index函数即可 from django.core.paginator import Paginator def index(request): messages = models.Message.objects.

  • Django实现基于类的分页功能

    开发个人博客时往往避免不了分页功能的实现,实现方法大体上分为函数和类两种.本文基于类实现分页功能,以下是详细代码: class Page: page_num = 0 total_count = 0 tartype = "" total_page = 0 # 总页数 per_page = 8 # 每页显示8篇文章 max_page = 11 # 每页最大展示页数选项 half_page = max_page // 2 category = "" # 标记该链接所属分类

  • Python Django搭建网站流程图解

    1. 创建Django REST framework工程 1.1手动创建工程文件夹 1.2进去工程文件夹内,执行命令:django-admin startproject web_project创建工程目录 1.3修改,添加目录结构 apps 存放Django的应用libs 存放第三方的库文件settings 存放配置文件的目录,分为开发dev和线上produtils 存放项目自己定义的公共函数或类等docs 用于存放一些说明文档资料 2. 修改配置文件 2.1 将Django工程中的settin

  • Django实现网页分页功能

    本文实例为大家分享了Django实现分页功能,为了容易区别功能的展现,先创建一个数据库,用数据库中的数据做演示. 创建数据库步骤如下: 1.创建模型,代码如下: from django.db import models # Create your models here. class Goods(models.Model): name = models.CharField(max_length=100) des = models.CharField(max_length=1000) class

  • 通过 Django Pagination 实现简单分页功能

    作者:HelloGitHub-追梦人物 文中所涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 当博客上发布的文章越来越多时,通常需要进行分页显示,以免所有的文章都堆积在一个页面,影响用户体验. Django 内置的 Pagination 能够帮助我们实现简单的分页功能,在上一篇教程中我们使用脚本批量生成了几百篇博客文章,正好用于测试分页效果. Paginator 类的常用方法 分页功能由 Django 内置的 Paginator 类提供,这个类位于 django.core.

  • SSH框架网上商城项目第5战之商品类别级联查询和分页功能

    上文我们完成了EasyUI菜单的实现,点击这里查看,这一节我们主要来写一下CategoryServiceImpl实现类,完成数据库的级联查询.一般项目从后往前做,先做service(我们没有抽取Dao,最后再抽取),做完了再做上面层. 在写之前,先看一下数据库中的表的情况: drop database if exists shop; /*创建数据库,并设置编码*/ create database shop default character set utf8; use shop; /*删除管理员

  • Django实现简单分页功能的方法详解

    本文实例讲述了Django实现简单分页功能的方法.分享给大家供大家参考,具体如下: 使用django的第三方模块django-pure-pagination 安装模块: pip install django-pure-pagination 将'pure_pagination'添加到settings.py文件中 INSTALLED_APPS = ( ... 'pure_pagination', ) 在view.py文件中 from django.shortcuts import render ro

  • Django分页功能的实现代码详解

    Django分页功能的实现 打开命令行窗口,创建Django工程,使用以下命令: django-admin startproject djpage cd djpage python manage.py startapp demo 使用PyCharm打开工程,在工程的同名文件夹的settings.py文件,注册应用,添加模板路径,修改部分的settings.py内容如下: INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth

随机推荐