python - Flask分页后,form表单无法传值,要怎么解决?
高洛峰
高洛峰 2017-04-18 09:14:22
0
3
353

1、定义了一个搜索表单 form.py:

class SearchForm(Form):
    search_keyword = StringField('', validators = [DataRequired()])
    submit = SubmitField('Start Search')

2、定义路由函数 views.py:

出问题的地方: 可以通过 value = request.form.get('search_keyword')取到表单提交的值; 在分页后,点击“下一页”,这个表单就被清空了,没有search_keyword这个值了,怎么都取不到,导致分页的其它页就无法根据search_keyword显示内容了。这个要怎么解决呢?

@app.route('/search', methods=['POST', 'GET'])
def search():
    form = SearchForm():
    keyword = form.search_keyword.data

    page = request.args.get('page', 1, type=int)
    value = request.args.get('keyword')

    if form.validate_on_submit():
        pagination = Post.query.filter(Post.content.like(keyword))paginate(
            page, per_page=current_app.config['default'], error_out=False)

posts = pagination.items
return render_template('search.html', posts=posts, pagination=pagination, form=form, value=value)

3、页面 search.html

<p class="list">
    {% include 'list.html' %}
</p>
{% if pagination %}
    <p class="pagination">
    {{ macros.pagination_widget(pagination, '.search', value=value)}}
    </p>
{% endif %}
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

répondre à tous(3)
迷茫

Envisageriez-vous d'utiliser

au lieu de poster ?
/aaaaa?search=keyword
value = request.args.get('search')

Même réponse, en utilisant deux vues

def search():
    form = DoSearchForm()
    if form.validate_on_submit():
        search = form.search.data
        return redirect(url_for('search_content', search=search))
    return render_template('搜索页')


def search_content():
    page = request.args.get('page')
    search = request.args.get('search')
    if not search:
        return redirect(url_for('search'))
    else:
        posts = Post.query.filter(Post.content.like(search)).paginate(
            page,
            per_page=current_app.config['default'],
            error_out=False)
    return render_template('显示内容页', posts=posts)

Ou vous pouvez utiliser une fonction

# 大概就是这么个情况
def search():
form = DoSearchForm()
page = request.args.get('page', type=int)
search = request.args.get('search')
if form.validate_on_submit() and request.method == 'POST':
    search = form.search.data
    return redirect(url_for('forums.search', search=search, page=1))
else:
    topics = Topic.query.filter(Topic.content.like(search)).paginate(
        page,
        per_page=current_app.config['PER_PAGE'],
        error_out=False)
    return render_template('forums/search.html', topics=topics,form = form)
刘奇

Pouvez-vous envisager de mettre le mot-clé de recherche dans g ?

洪涛

Après vérification, l'itinéraire sera redirigé et explicitement utilisé comme paramètre de routage. Vous le comprendrez en regardant les URL de recherche de chaque site Web.
De cette façon, la post-vérification empêchera les messieurs et non les méchants.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal