flask实现分页

Posted in 2016-4-25 1:7 | Category: Python | Tags: flask jinja2 python

数据库实现分页

offset

使用offset可以实现数据库分页功能

questions = Questions.query.offset(num) # 从num开始

limit

使用limit实现限制每页的文章数量

questions = Questions.query.offset(num).limit(6) #每页显示6篇文章

前端实现分页

需求设计

是使用上一页,下一页,用表单进行跳转,还是使用数字显示

获得文章数量 pages,和当前页码 number

简单的上一页,下一页

因为我的设计不是这个,所以简单说一下

下一页,上一页

jinja2 代码

<a href="{{ url_for('blog.index',number=number + 1)}}">下一页</a>
<a href="{{ url_for('blog.index',number=number - 1)}}">下一页</a>

首页没有上一页,尾页没有下一页

{% if number == pages %}
no next page
{% else %}
 <a href="{{ url_for('blog.index',number=number + 1)}}">下一页</a>
{% endif %}
{% if number == 1 %}
no previous page
{% else %}
 <a href="{{ url_for('blog.index',number=number - 1)}}">上一页</a>
{% endif %}

显示各个页码的分页

搞了一下午,终于搞定了

设计

总页码小于7,显示所有页码,总页码大于7,显示当前页码以及当前页码前两页和后两页. 当页码大于7时,当前页码小于4,显示1~6页的页码·····

使用

{{ import 'base/page.html' as page }}
number为当前页码,pages为总共的页码
{{ page.page('blog.index',number=number,pages=pages)}}
如果url_for需要加参数,使用
{{ page.page …

自定义jinja2转义标签

Posted in 2016-2-22 15:43 | Category: Python | Tags: flask jinja2 python

参考问题
参考资料
最终代码:

def safe_clean(text):
    from flask import Markup
    from bleach import clean
    tags = ['b','i','font','br']
    attrs = {
        '*':['style'],
        'font':['color']
    }
    styles = ['color']
    return Markup(clean(text,tags = tags,
                        attributes = attrs,
                        styles = styles))

自定义filter过滤器