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. Linux OpenGL 实践篇-14-多实例渲染

    多实例渲染 OpenGL的多实例渲染是一种连续执行多条相同的渲染命令的方法,并且每条命令产生的结果都有轻微的差异,通常用于渲染大量的几何物体. 设想一个场景,比如太空,我们需要渲染数以万记的星球,如果 ...

  2. js 控制台输出

    var a = 'string'; var b = 123; console.log("The %s jumped over %d tall buildings", a, b); ...

  3. gendiff - 致力于创建无错的 diff 文件的工具

    SYNOPSIS gendiff <directory> <diff-extension> DESCRIPTION gendiff 是一个简单的脚本,目标是根据单一的目录生成一 ...

  4. Python 类变量,成员变量,静态变量,局部变量

    局部 class TestClass(object): val1 = 100 def __init__(self): self.val2 = 200 def fcn(self,val = 400): ...

  5. 快学UiAutomator各种框架介绍

    Monkey 编写语言:命令行 运行环境:使用adb连接PC运行测试对象:Android平台自动化测试的一种手段,通过Monkey程序模拟用户触摸屏幕.滑动Trackball.按键等操作来对设备上的程 ...

  6. Codeforces Round #273 (Div. 2)-B. Random Teams

    http://codeforces.com/contest/478/problem/B B. Random Teams time limit per test 1 second memory limi ...

  7. shell脚本,计算学生分数的题目。

    1.计算学生平均分数的值是多少? 2.计算每门课都大于80分的学生姓名.3.计算每门课都小于90分的学生姓名.

  8. SimpleWeather APP

    参考 iOS 7 Best Practices; A Weather App Case Study: Part 1/2 iOS 7 Best Practices; A Weather App Case ...

  9. python面向对象编程(OOP)

    python作为一种解释性语言,其主要的编程方式就是面向对象,而且python的框架django也是主要面向对象的编程. 类(class)和对象(object) 类(class)是用来描述具有相同属性 ...

  10. perl学习之:编译、执行与内存关系(转)

    1.所谓在编译期间分配空间指的是静态分配空间(相对于用new动态申请空间),如全局变量或静态变量(包括一些复杂类型的 常量),它们所需要的空间大小可以明确计算出来,并且不会再改变,因此它们可以直接存放 ...