如何使烧瓶分页保持查询条件

时间:2016-10-24 13:25:07

标签: flask pagination flask-sqlalchemy

这是我的视图功能:

def get_user_info():
    form = UserInfoForm()
    query = UserInfo.query
    if form.validate_on_submit():
        query = query.filter_by(sex=form.sex.data)
    flag = False
    page = request.args.get('page', 1, type=int)
    pagination = query.paginate(page=page, per_page=10, error_out=False)
    return render_template("user_info.html", form=form,data=pagination.items, pagination=pagination)

这是我的html的一部分:

<form class="form-inline" action="{{url_for('.get_user_info')}}", method="post">
{{ form.csrf_token }}
<div class="panel-body">
    <div class="form-group">
        {{ form.sex.label }}:
        {{ form.sex(class="form-control") }}
    </div>
    <div class="form-group">
        {{ form.submit(class="btn btn-primary") }}
    </div>
</div>

这是我的分页宏:

{% macro pagination_widget(pagination, endpoint) %}
{% if pagination.total != 0 %}
<ul class="pagination">
    <li{% if pagination.page == 1 %} class="disabled"{% endif %}>
    <a href="{% if pagination.page != 1 %}{{ url_for(endpoint, page=1, **kwargs) }}
{% else %}#{% endif %}">&laquo;&laquo;</a>
</li>
<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 %}
    <li {% if p == pagination.page %} class="active"{% endif %}>
        <a href="{{ url_for(endpoint, page = p, **kwargs) }}">{{ p }}</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>
<li{% if pagination.page == pagination.pages %} class="disabled"{% endif %}>
<a href="{% if pagination.page != pagination.pages %}{{ url_for(endpoint, page=pagination.pages, **kwargs) }}
{% else %}#{% endif %}">&raquo;&raquo;</a>
</li>
</ul>
{% endif %}
{% endmacro %}

我在我的页面中使用了一个selectfiled sex,当我在我的页面中选择男性时,我得到了paginate对象,我的第一页用户都是男性。但是当我点击下一页时,结果将包括男性和女性,我只想要它像第一页,它只有男性用户信息。感谢。

1 个答案:

答案 0 :(得分:0)

我今天解决了我的问题。 任何宏都有* args和** kwargs,所以我可以将查询条件的参数传递给它,在我的视图函数中使用request.args.get()来获取参数并将其设置为form。