Django: 分页功能

成果:


将之前爬取的信息罗列出来,做出分页的样式

代码:
在之后的步骤中在相信说明吧

步骤:

1.这个mongoengine需要pip安装的pip install mongoengine命令即可实现
建立与数据库的链接,connect的第一个参数是数据库的名称

先是在setting中加入数据

2.在第一步之后,在models中

from django.db import models
from mongoengine import *
# from mongoengine import connect
# connect('ceshi', host='127.0.0.1', port=27017)
# Create your models here.


class ItemInfo(Document):
    # StringField()的意思就是字符串
    title = StringField()
    # ListField的意思就是列表化一下
    area = ListField(StringField())
    pub_date = StringField()
    look = StringField()
    url = StringField()
    cates = ListField(StringField())
    time = StringField()
    price = StringField()

meta = {
    'collection': 'item_info',
}
# 亲测可用
# for i in ItemInfo.objects[:1]:
#     print(i.title)

我个人的理解是初始化数据库,这个是数据库事先存在的情况下,与数据库建立连接。而且在class中,每一项右侧都要跟数据库的key一致(必须一样,如果不一致就报错了)
可以看到,在前后注释掉的东西可以用来验证是否成功
3.在view.py中
需要导入这个类
from ganji.models import ItemInfo

def index(request):
    limit = 4
    # 取出20个元素
    item_info = ItemInfo.objects[:1]
    # 下面的语句跟上面语句等价,但是为什么索引在这里
    # 仿佛失效的样子
    # item_info = ItemInfo.objects.all()

    # 分页器,前面是总共的元素,limit是每页的元素个数
    paginator = Paginator(item_info, limit)
    print('页码数量', paginator.num_pages)

    # 从页面获取页数信息,这里是获取?后参数page的value,
    # 可以看到get后的‘page’并不是我们定义的,而是我们获取的
    # 它的值就是个int
    page = request.GET.get('page', 1)

    # 显示某‘page’页面的信息
    loaded = paginator.page(page)

    # print('这里是loaded', loaded)
    print('page_range', paginator.page_range)
    context = {
        'item_info': loaded,
    }

    # context是关键字,传入字典,但是这个字典的key才是在HTML中用到的
    # 这点跟flask不一样,flask是随便定义user=user,左边是模板中的,右边是views中的
    return render(request, 'index.html', context)

4.同时在HTML文件中
写入信息,用循环既可,这点跟jinja2很相似,但是需要注意的是:
我们用的是context的key,并不是context本身

{% for item in item_info %}
    <section class="post">
        <header class="post-header">
            <h2 class="post-title">{{ item.title }}</h2>
            <p class="post-meta">
                {% for cate in item.cates %}
                <a class="post-category post-category-design" href="#">{{ cate }}</a>
                {% endfor %}
                 <br>
                 <br>
                {% for a in item.area %}
                <a class="post-category post-category-pure" href="#">{{ a }}</a>
                {% endfor %}
            </p>
        </header>
        <div class="post-description">
            <p>
                ¥{{ item.price }}---{{ item.pub_date }}
            </p>
        </div>
    </section>
{% endfor %}

5.分页器
在views视图函数中导入本次的重点--分页器(详细资料点击查看)
from django.core.paginator import Paginator
需要在HTML中特意做出来这个分页器。
其原理是:显示页码,当点击上一页下一页的时候,会自动给视图函数传参数,然后根据这个参数,返回数据给HTML渲染

<div class="footer">
    <div class="pure-menu pure-menu-horizontal">
        <ul>
           <li class="pure-menu-item"><a href="?page=1" class="pure-menu-link">首页</a></li>
           {% if item_info.has_previous %}
               <li class="pure-menu-item"><a href="?page={{ item_info.previous_page_number }}" class="pure-menu-link">< pre</a></li>
           {% endif %}
               <li class="pure-menu-item"><span> {{ item_info.number }} of {{ item_info.paginator.num_pages }}</span></li>
           {% if item_info.has_next %}
               <li class="pure-menu-item"><a href="?page={{ item_info.next_page_number }}" class="pure-menu-link">next ></a></li>
           {% endif %}
           <li class="pure-menu-item"><a href="?page={{ item_info.paginator.num_pages }}" class="pure-menu-link">尾页</a></li>
        </ul>
    </div>
</div>

其中用到了很多函数,可以查看分页器的详细介绍

新技能GET:

1.分页器--http://python.usyiyi.cn/django/topics/pagination.html
2.流程是:
setting中注册数据库->models中引入数据库->views中使用数据库->最终用数据库渲染

遇到的坑:

1.在models中引入数据库的时候
class ItemInfo(Document):
其中的对象是以大写字母D开头的Document
2.在views.py中,item_info = ItemInfo.objects[:1]是复数的objects,复数!

疑问未决:

如图,第十行的代码中索引好像完全不起作用,无论改为多少,都能在第15行初始化中加载所有的object!而在11行print(item_info)中还是1,到16行就已经是所有数据都加载进去了!!


就是这个问题
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容