• django 和 mongdb 写一个简陋的网址,以及用django内置的分页功能


    https://github.com/factsbenchmarks/simple_websit_about_58

    一 设置

      数据库的设置

      在settings文件中加入这样一段代码:

    from mongoengine import connect
    connect('xxx',host='127.0.0.1',port=27017)

      说明:xxx 是某个数据库的名称。

    二 定义models

    class Info(mongoengine.DynamicDocument):
        meta = {
            'collection': 'info'
        }
        pub_date = mongoengine.StringField(max_length=20)
        area = mongoengine.ListField(mongoengine.StringField(max_length=5))
        title = mongoengine.StringField(max_length=50)
        url = mongoengine.URLField(max_length=100)
        price = mongoengine.StringField(max_length=10)

      说明:推荐继承DynamicDocument类。相关联的表的字段,不需要再Info类中都声明一次。如果是继承Document,每个field都要声明。

            Info类关联到某个表,在meta = {'collection':xx}绑定在一起。

    三  理解接收代码

    info = models.Info.objects
    print(info)

      输出:

    [<Info: Info object>, <Info: Info object>, <Info: Info object>, <Info: Info object>, <Info: Info object>, <Info: Info object>]

    四  关于Paginator 内置分页器

      有一点绕,友情提示!

      part 1 

    from django.core.paginator import Paginator
    s = 'abcdefghijklmnopqrstuvwxyz'
    p = Paginator(s,2)
    p2 = p.page(2)
    print(p2,type(p2))
    print(p2.object_list)

      输出:

    <Page 2 of 13> <class 'django.core.paginator.Page'>
    cd

       part 2

    s = 'abcdefghijklmnopqrstuvwxyz'
    p = Paginator(s,2)
    p2 = p.page(2)
    
    print(p2.number)  # 当前页码
    print(p2.paginator.num_pages)   #分页器的所有页码

      输出:

    2
    13

       part 3 下面这个就有点厉害了!

    s = 'abcdefghijklmnopqrstuvwxyz'
    p = Paginator(s,5)
    p2 = p.page(4)
    
    print(p2)
    for i in p2 :   #把当前页的元素一一打出来
        print(i)

      输出:

    <Page 4 of 6>
    p
    q
    r
    s
    t

       part 4

    s = 'abcdefghijklmnopqrstuvwxyz'
    p = Paginator(s,5)
    p2 = p.page(4)
    
    print(p2)
    print(p2.next_page_number())
    print(p2.previous_page_number())
    print(p2.has_next())
    print(p2.has_previous())

      输出:

    5
    3
    True
    True

    五 models

    import mongoengine
    
    
    class Info(mongoengine.DynamicDocument):
        meta = {
            'collection': 'info'
        }
        pub_date = mongoengine.StringField(max_length=20)
        area = mongoengine.ListField(mongoengine.StringField(max_length=5))
        title = mongoengine.StringField(max_length=50)
        url = mongoengine.URLField(max_length=100)
        price = mongoengine.StringField(max_length=10)

    六 views

    from django.core.paginator import Paginator
    
    
    
    def index(request):
        limit = 5
        infos = models.Info.objects
        pagin = Paginator(infos,limit)
        page_num = request.GET.get('page',1)  # 字典操作,第一页没有page=,默认取值 1
        a_page = pagin.page(page_num)
        context = {
            'a_page':a_page,
        }
        return render(request,'index.html',context)

    七 template

    <body>
        <a href="?name='xxx'"><p>测试</p></a>
        <p>index页面</p>
        <div>
            {% for item in a_page %}
                <hr>
                <p>{{  item.title}} </p>
                <p>{{  item.date}}</p>
                <p>{{  item.url}} </p>
                <p>{{  item.area}} </p>
                <p>{{  item.price}} </p>
            {% endfor %}
    
        <div>
            {% if a_page.has_previous %}
                < <a href="?page={{ a_page.previous_page_number }}"> {{ a_page.previous_page_number }}</a>   {# 这里构建 a 标签,其href 还是挺让我吃惊的 #}
            {% endif %}                                                                                       {# href='?page=' 就是在主页后面直接拼接上#}
            {{ a_page.number }}
            {% if a_page.has_next %}
                <a href="?page={{ a_page.next_page_number }}"> {{ a_page.next_page_number }} </a>  >
            {% endif %}
        </div>
        </div>
    </body>

    八 urls

    from django.conf.urls import url
    from django.contrib import admin
    from app01 import views
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^index/', views.index),
    ]

    九 最终样式

      

     十  补充

      可以看到网址是 ?page=xx&name=xxx时,在Query String Parameters 中可以准确查到。

  • 相关阅读:
    glusterFS空间不够了怎么办
    openshift安装部署
    ELK 安装部署小计
    Android框架汇集
    Android项目实战(四十六):Usb转串口通讯(CH34xUARTDriver)
    Android项目实战(四十五):Zxing二维码切换横屏扫描
    Android项目实战(三十九):Android集成Unity3D项目(图文详解)
    Android项目实战(三十四):蓝牙4.0 BLE 多设备连接
    Android项目实战(二十九):酒店预定日期选择
    Android项目实战(二十四):项目包成jar文件,并且将工程中引用的jar一起打入新的jar文件中
  • 原文地址:https://www.cnblogs.com/654321cc/p/8809945.html
Copyright © 2020-2023  润新知