随着网站内容的增加 在单个页面上显示所有的数据浏览速度会变慢且不符合实际需求,内容越多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) %}
 
     
         
          «
      
    
   {% for p in pagination.iter_pages() %}
       {% if p %}
        {% if p == pagination.page %}
           {{ p }}
        {% else %}
           
  • {{ p }}
  •         {% endif %}      {% endif %}    {% endfor %}                        »                {% endmacro %}

    flask 分页对象属性

    属性
    说明
    items
    当前显示页面的内容
    query
    分页源查询
    page
    当前的页数
    prev_num
    上一页的页数
    next_num
    下一页的页数
    has_prev
    如果有上一页,返回True
    has_next
    如果有下一页,返回True
    pages
    得到总的页数
    per_page
    per_pages 每页显示多少条内容


    最终显示结果:

    Flask--------分页显示文章_第1张图片


    题外:

        回到家乡工作最现实的问题是专业不对口,不能说城市需求少,只能怪自己知识面窄吧。老家呢只能算4线城市吧,生活节奏比较慢,大多人对网络需求比较少 上班工资低 做六休一、不签合同 没有五险一金,改变吧,所以想着自己接点活做点什么,想来想去还是做网页,看过一段时间php 又对比了下python tornado flask 框架 最终还是选择flask,原因:1、会点python 2、文档齐全 3、需求少能做网页管他用什么做 当然选择自己熟悉的。