https://github.com/factsbenchmarks/simple_websit_about_58

一 设置

  数据库的设置

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

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

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

二 定义models

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

  说明:推荐继承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,)
p2 = p.page()
print(p2,type(p2))
print(p2.object_list)

  输出:

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

  part 2

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

  输出:


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

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

  输出:

<Page  of >
p
q
r
s
t

  part 4

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

  输出:


True
True

五 models

import mongoengine

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

六 views

from django.core.paginator import Paginator

def index(request):
limit =
infos = models.Info.objects
pagin = Paginator(infos,limit)
page_num = request.GET.get('page',) # 字典操作,第一页没有page=,默认取值
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 中可以准确查到。

django 和 mongdb 写一个简陋的网址,以及用django内置的分页功能的更多相关文章

  1. django内置的分页功能

    django内置的分页功能 # 先导入需要查询的模型类 from game.models import Score # 导入内置的分页功能 from django.core.paginator imp ...

  2. 学了C语言,如何利用cURL写一个程序验证某个网址的有效性?

    在<C程序设计伴侣>以及这几篇关于cURL的文章中,我们介绍了如何利用cURL写一个下载程序,从网络下载文件.可是当我们在用这个程序下载文件时,又遇到了新问题:如果这个网址是无效的,那么我 ...

  3. 仿写一个简陋的 IOC/AOP 框架 mini-spring

    讲道理,感觉自己有点菜.Spring 源码看不懂,不想强行解释,等多积累些项目经验之后再看吧,但是 Spring 中的控制反转(IOC)和面向切面编程(AOP)思想很重要,为了更好的使用 Spring ...

  4. Django内置的分页模块

    自定义分页 未封装版: 优点:直观 缺点:代码乱,不易维护,可拓展性差 data = [] for i in range(1, 302): tmp = {"id": i, &quo ...

  5. 第二十八篇 -- 写一个简陋的WIFI服务器界面

    效果图: Dlg.cpp // WIFIWMITestDlg.cpp : implementation file // #include "stdafx.h" #include & ...

  6. 手写一个HTTP框架:两个类实现基本的IoC功能

    jsoncat: 仿 Spring Boot 但不同于 Spring Boot 的一个轻量级的 HTTP 框架 国庆节的时候,我就已经把 jsoncat 的 IoC 功能给写了,具体可以看这篇文章&l ...

  7. django分页功能实现

    django内置的分页功能需要引入内置模块from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger Pagina ...

  8. 如何写一个LaTeX类文件,并设计你自己的简历

    2017/8/29 20:26:03 原文地址 https://www.sharelatex.com/blog/2011/03/27/how-to-write-a-latex-class-file-a ...

  9. 用VBA写一个计算器

    着急的 玩家 可以 跳过“============”部分 ======================================可以跳过的 部分   开始==================== ...

随机推荐

  1. confluent 更换ip地址之后修改数据库

    由于地址搬迁导致ip地址有变动,整个的confluence的服务器的ip的地址更换和对应的数据库地址更换 root@computer-PowerEdge-T30:/opt/atlassian/conf ...

  2. 当互联网遇上家装,十大家装O2O混战

    2015年已过去大半,装修O2O就出现了新的局面:为数众多的家居网络平台在家装O2O领域还未站稳脚跟,新的入局者就打出超低价格登场.新老O2O家装大战迅速展开,除了拼价格还拼品牌和体验,家装O2O的好 ...

  3. 转过来的Xpath语法

    XPath 是XML的查询语言,和SQL的角色很类似.以下面XML为例,介绍XPath 的语法.   <?xml version="1.0" encoding="I ...

  4. ftpaccess - ftpd的配置档

    描述 DESCRIPTION 这个ftpaccess档案是用来配置下述功能的运作 存取功能(AccessCapabilities) autogroup<群组名称><类别>[&l ...

  5. maven项目创建(eclipse配置

    Eclipse相关配置: eclipse 设置默认编码为Utf-8 需要设置的几处地方为: Window --> Preferences --> General --> Conten ...

  6. STATIC 和 CLASS

    STATIC 和 CLASS 由 王巍 (@ONEVCAT) 发布于 2015/01/28 Swift 中表示 “类型范围作用域” 这一概念有两个不同的关键字,它们分别是 static 和 class ...

  7. 力扣题目汇总(重复N次元素,反转字符串,斐波那契数)

    重复 N 次的元素 1.题目描述 在大小为 2N 的数组 A 中有 N+1 个不同的元素,其中有一个元素重复了 N 次. 返回重复了 N 次的那个元素. 示例 1: 输入:[1,2,3,3] 输出:3 ...

  8. Web框架之Django_06 模型层了解(F查询、Q查询、事务、update和save、only和defer、choice属性、bulk_create)

    摘要: F查询 Q查询 事务 一.F查询 在上面所有的例子中,我们构造的过滤器都只是将字段值与某个我们自己设定的常量做比较.如果我们要对两个字段的值做比较,那该怎么做呢?Django 提供 F() 来 ...

  9. (转)Duplicate Symbol链接错的原因总结和解决方法

    duplicate symbol是一种常见的链接错误,不像编译错误那样可以直接定位到问题的所在.但是经过一段时间的总结,发现这种错误总是有一些规律可以找的.例如,我们有如下的最简单的两个类代码: // ...

  10. ios开发中遇到的文件和字符的问题大总结

    我今天遇到的NSString问题 今天遇到一个字符串空指针问题,让我明白了许多 其实我们定义一个NSString * string,其实是定义了一个字符串指针,现在string没有指向任何地方,我们必 ...