1. 程式人生 > >flask資料分頁paginate的使用(flask學習)

flask資料分頁paginate的使用(flask學習)

Flask的資料分頁示例

1,首先寫資料獲取的檢視函式,就像這樣:

@app.route('/')
@login_required
def index():
    page=request.args.get('page',1,type=int)
    pagination=User.query.order_by(User.createTime.desc()).paginate(page,per_page=12,error_out=False)
    users=pagination.items
    return render_template('index.html', name=current_user.username,users=users,pagination=pagination)

數從請求的查詢字串(request.args)中獲取,如果沒有明確指定,則預設渲 染第一頁。引數 type=int 保證引數無法轉換成整數時,返回預設值。

為了顯示某頁中的記錄,要把 all() 換成 Flask-SQLAlchemy 提供的 paginate() 方法。頁 數是 paginate() 方法的第一個引數,也是唯一必需的引數。可選引數 per_page 用來指定 每頁顯示的記錄數量;如果沒有指定,則預設顯示 20 個記錄。另一個可選引數為 error_ out,當其設為 True 時(預設值),如果請求的頁數超出了範圍,則會返回 404 錯誤;如果 設為 False,頁數超出範圍時會返回一個空列表。

2,顯示分頁器:

paginate() 方法的返回值是一個 Pagination 類物件,這個類在 Flask-SQLAlchemy 中定義。 這個物件包含很多屬性,用於在模板中生成分頁連結,因此將其作為引數傳入了模板。分頁物件的屬性簡介如表所示。

物件方法:

接下來以 Jinja2 巨集的形式實現的分頁導航,

分頁模板(_macros.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 %}">&laquo;
            </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 %}
            {% else %}
            <li class="disabled">
                <a href="#">&hellip;</a>
            </li>
            {% 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 %}">&raquo;</a>
        </li>
    </ul>
{% endmacro %}

然後就是在需要分頁的地方引入此模板:

{% import "_macros.html" as macros %} 
..........其他程式碼省略...........
{%if pagination%}
    <div class="pagination">
        {{ macros.pagination_widget(pagination, '.index') }}
    </div>
{% endif %}

至於分頁的css樣式,自己寫吧,怎麼好看怎麼寫!

分頁就是這麼簡單