设计django网站的翻页功能(注意程序在不同.py文件中切换的逻辑)
1. 打开views.py
,添加如下:
def index(request):
+ context ={ # 模拟一个假的数据库.models层相当于一个数据库的代理,把数据库内容映射到templates模版层中,
+ 'title': 'it is a new title', # 实现了同一页面加载不同数据的功能
+ 'des': 'let me say something, ok,i need more word for the web',
+ 'tag': 'love'
+ }
return render(request, 'index.html',context)
上述添加一个context后 ,最后render会将该段内容渲染到网页中
2. 网页中更改对应的代码,templates下的index.html
更改前: <h2 class="post-title"> My Home </h2>
更改后: <h2 class="post-title">{{ title }}</h2> # {{ }} 套着,就可以实现内容的替代,注意对比ruby
3. 更改连接数据库设置
在最下方settings.py
添加:
from mongoengine import connect
connect ('website', host='127.0.0.1', port= 27017 )
4. 连接数据库,models.py
这里先安装 pip3 install mongoengine
,第一次要重启pycharm
修改models.py
class ItemInfo(Document): # 类的命名方式,括号内是它继承的类,面向对象
title = StringField()
url = StringField()
price = IntField() # 这里的命名必须对应数据库里的命名
look = StringField() # 而且,这里必须列出所有数据库的key,否则报错提示某key 不存在
area = StringField()
cates = StringField()
pub_date = StringField()
meta = {'collection':'new_ganji1'} # 仅用于调用已存在的数据库,这行就是告诉django,你的数据是从哪里来的,对应哪个collection
for i in ItemInfo.objects[:1]:
print(i.title,i.url,i.price)
5. 修改views.py
def index(request):
item_info = ItemInfo.objects[:1] # 新增这条从数据库调用数据了
context ={ # 模拟一个假的数据库.models层相当于一个数据库的代理,把数据库内容映射到templates模版层中,
'title': item_info[0].title, # 这里修改了,对照数据库。
'url': item_info[0].url,
'price': item_info[0].price
}
return render(request, 'index.html',context) # 调用
重启,刷新,数据载入正常
翻页键的设计
1. 继续修改views.py
from django.core.paginator import Paginator # 最上方加上这句代码
...............
def index(request):
limit = 4 # 一页限制4条数据,从数据库中随机放4条狗
item_info = ItemInfo.objects[:1] # 这里1表示显示一条信息,比如title,一个小块只能配一条狗
paginator = Paginator(item_info,limit)
page = request.GET.get('page',1) # 请求获得一页
loaded = paginator.page(page)
context ={ # 模拟一个假的数据库.models层相当于一个数据库的代理,把数据库内容映射到templates模版层中,
'ItemInfo':loaded
}
return render(request, 'index.html',context) # 调用
2. 修改index.html
{% for i in ItemInfo %} # 大致用这样的方法将内部的显示循环起来。把数据库的数据调用起来
..........
<div class="post-description">
<p>
{{ i.title }}
</p>
.........
{% endfor %}
3. 设计翻页键
最后,我们再添加这段代码,在footer前添加。
<div class="text text-right">
{% if ItemInfo.has_previous %}
<a href="?page={{ ItemInfo.previous_page_number }}"> < Pre </a>
{% endif %}
<span> {{ ItemInfo.number }} of {{ ItemInfo.paginator.num_pages }} </span>
{% if ItemInfo.has_next %}
<a href="?page={{ ItemInfo.next_page_number }}"> Next></a>
{% endif %}
</div>
实现了大致的翻页功能