django 和 mongdb 写一个简陋的网址,以及用django内置的分页功能
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内置的分页功能的更多相关文章
- django内置的分页功能
django内置的分页功能 # 先导入需要查询的模型类 from game.models import Score # 导入内置的分页功能 from django.core.paginator imp ...
- 学了C语言,如何利用cURL写一个程序验证某个网址的有效性?
在<C程序设计伴侣>以及这几篇关于cURL的文章中,我们介绍了如何利用cURL写一个下载程序,从网络下载文件.可是当我们在用这个程序下载文件时,又遇到了新问题:如果这个网址是无效的,那么我 ...
- 仿写一个简陋的 IOC/AOP 框架 mini-spring
讲道理,感觉自己有点菜.Spring 源码看不懂,不想强行解释,等多积累些项目经验之后再看吧,但是 Spring 中的控制反转(IOC)和面向切面编程(AOP)思想很重要,为了更好的使用 Spring ...
- Django内置的分页模块
自定义分页 未封装版: 优点:直观 缺点:代码乱,不易维护,可拓展性差 data = [] for i in range(1, 302): tmp = {"id": i, &quo ...
- 第二十八篇 -- 写一个简陋的WIFI服务器界面
效果图: Dlg.cpp // WIFIWMITestDlg.cpp : implementation file // #include "stdafx.h" #include & ...
- 手写一个HTTP框架:两个类实现基本的IoC功能
jsoncat: 仿 Spring Boot 但不同于 Spring Boot 的一个轻量级的 HTTP 框架 国庆节的时候,我就已经把 jsoncat 的 IoC 功能给写了,具体可以看这篇文章&l ...
- django分页功能实现
django内置的分页功能需要引入内置模块from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger Pagina ...
- 如何写一个LaTeX类文件,并设计你自己的简历
2017/8/29 20:26:03 原文地址 https://www.sharelatex.com/blog/2011/03/27/how-to-write-a-latex-class-file-a ...
- 用VBA写一个计算器
着急的 玩家 可以 跳过“============”部分 ======================================可以跳过的 部分 开始==================== ...
随机推荐
- (四)maven之查找jar包坐标,选择jar包版本
① 先访问http://www.mvnrepository.com/ ,这个地址是maven的公共库. ② 以spring core的jar包为例.在页面的最上方的中间,输入spring ...
- 如何启动Intel VT-x
如何启动Intel VT-x 5 在64bit win7系统下安装了Vmware10,然后安装64位的UbuntuKylin 14.04,想要打开UbuntuKylin,弹出如下对话框: 请问该如何启 ...
- flask--Django 基本使用
#导入flaskfrom flask import Flask #创建应用 app = Flask(__name__) #创建根路径视图 @app.route('/') def hello_world ...
- NYOJ-1057-寻找最大数(三)
http://acm.nyist.net/JudgeOnline/problem.php?pid=1057 寻找最大数(三) 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描 ...
- idea Please specify commit message
在idea中使用github来进行版本控制的时候, 当点击提交的时候遇到了这个问题 错误: Please specify commit message 解决方法: 在commit message中填写 ...
- 51nod 1135 原根 (数论)
题目链接 建议与上一篇欧拉函数介绍结合食用. 知识点:1.阶:a和模m互质,使a^d≡1(mod m)成立的最小正整数d称为a对模m的阶(指数) 例如: 2^2≡1(mod3),2对模3的阶为2; ...
- hihoCoder第一周---最长回文子串(1032)
其实这就是mancher算法的板子题,贴个代码好了. 思想请见我的另一篇博客: https://blog.csdn.net/qq_41090676/article/details/86768361 # ...
- 关于PHP版本比较函数version_compare的问题
$version1="v4.0"; $version2="v4.0.0"; print_r(version_compare($version1,$version ...
- 【OS_Linux】三大文本处理工具之sed命令
1.sed命令的简介及用法 sed:即为流编辑器,“stream editor”的缩写.他先将源文件读取到临时缓存区(也叫模式空间)中,再对满足匹配条件的各行执行sed命令.sed命令只针对缓存区中的 ...
- Re:从零开始的Linux之路(文件权限)
基于 Red Hat Enterprise Linux 7.5 或者 CentOS 7.4 基本概念 Linux最核心的一个概念就是:Linux里面任何东西都可以被视为一个文件,包括系统本身(说到底L ...