随着网站内容的增加 在单个页面上显示所有的数据浏览速度会变慢且不符合实际需求,内容越多web浏览器需要花费大量的时间下载并渲染内容页面,降低用于访问质量。解决方法是进行分页显示数据。
app.py
--forms.py
from flask_wtf import form
from wtforms import TextAreaField
from wtfforms.validators import DateRequired
class PostForm(form):
body = TextAreaField('撰写文章',validators=[DateRequired()])
app.py
--views.py
from app import auth
from app.models import Post
from app import db
@auth.route('/',methods=['GET','POST'])
def index():
form = PostForm()
if form.validate_on_submit():
post = Post(body=form.body.data,users=current_user._get_current_object())
db.session.add(post)
return redirect(url_for('main.index'))
# 指定渲染的页数
page = request.args.get('page', 1, type=int)
# pagination是salalchemy的方法,第一个参数:当前页数,per_pages:显示多少条内容 error_out:True 请求页数超出范围返回404错误 False:反之返回一个空列表
pagination = Post.query.order_by(Post.timestamp.desc()).pagination(page, per_page=current_app.config['FLASK_POST_PRE_ARGV'], error_out=False)
# 返回一个内容对象
posts = pagination.items
return render_template('index.html', form=form, posts=posts)
app.py
--models.py
class Post(db.Model):
__tablename__ = 'posts'
id = db.Column(db.Integer,primary_key=True)
body = db.Column(db.Text)
timestamp = db.Column(db.DateTime,index=True,default=datetime.utcnow)
users_id = db.Column(db.Integer,db.ForeignKey('users.id'))
app.py
--templates.py
--index.html
{% extends "base.html" %}
{% import "_macors_pagination.html as macros" %}
{%block title %}撰写文章{% endblock %}
{% block page_content %}
{{ macros.pagination.widget(pagination, 'main.index') }}
{% endblock %}
# 定义分页模板的宏
app.py
--templates.py
--_macors_pagination.html
{% macro pagination_widget(pagination, endpoint) %}
<ul class="pagination">
<li{% if not pagination.has_prev %} class="disabled"{% endif %}>
<a href="{% if pagination.has_prev %}{{ url_for(endpoint, page=pagination.page - 1, **kwargs) }}{% else %}#{% endif %}">
«
</a>
</li>
{% for p in pagination.iter_pages() %}
{% if p %}
{% if p == pagination.page %}
<li class="active"><a href="{{ url_for(endpoint, page=p, **kwargs) }}">{{ p }}</a></li>
{% else %}
<li><a href="{{ url_for(endpoint, page=p, **kwargs) }}">{{ p }}</a></li>
{% endif %}
{% endif %}
{% endfor %}
<li{% if not pagination.has_next %} class="disabled"{% endif %}>
<a href="{% if pagination.has_next %}{{ url_for(endpoint, page=pagination.page + 1, **kwargs) }}{% else %}#{% endif %}">
»
</a>
</li>
</ul>
{% endmacro %}
flask 分页对象属性
属性 | 说明 |
items | 当前显示页面的内容 |
query | 分页源查询 |
page | 当前的页数 |
prev_num | 上一页的页数 |
next_num | 下一页的页数 |
has_prev | 如果有上一页,返回True |
has_next | 如果有下一页,返回True |
pages | 得到总的页数 |
per_page | per_pages 每页显示多少条内容 |
最终显示结果:
题外:
回到家乡工作最现实的问题是专业不对口,不能说城市需求少,只能怪自己知识面窄吧。老家呢只能算4线城市吧,生活节奏比较慢,大多人对网络需求比较少 上班工资低 做六休一、不签合同 没有五险一金,改变吧,所以想着自己接点活做点什么,想来想去还是做网页,看过一段时间php 又对比了下python tornado flask 框架 最终还是选择flask,原因:1、会点python 2、文档齐全 3、需求少能做网页管他用什么做 当然选择自己熟悉的。
转载于:https://blog.51cto.com/xuqiangqiang93/1891314