随着网站内容的增加 在单个页面上显示所有的数据浏览速度会变慢且不符合实际需求,内容越多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、需求少能做网页管他用什么做 当然选择自己熟悉的。
本文出自 “PythonWeb” 博客,请务必保留此出处http://xuqiangqiang93.blog.51cto.com/12507450/1891314
原文:http://xuqiangqiang93.blog.51cto.com/12507450/1891314