flask-paginate로 검색결과 페이지화
10709 단어 페이지네이션파이썬FlaskFlask-paginate
개요
flask로 작성한 검색의 WEB 앱을 flask-paginate로 페이지 네이션 (페이지 나누기)했습니다.
페이지 전환으로 조금 걸렸기 때문에 기사로 하겠습니다.
환경
첫회 작성(불량 있음)
~/result 페이지로부터 검색 조건을 POST로 request.form로서 취득해, 검색한 결과가 results(리스트)로서 얻을 수 있는 상태입니다.
from flask import Flask, request, redirect, url_for, render_template, flash, session
from flask_paginate import Pagination, get_page_parameter
app = Flask(__name__)
@app.route('/result', methods=['GET', 'POST'])
def show_results():
# request.formを用いた、なんらかの検索
results = [...] # 検索結果(リスト)
page = request.args.get(get_page_parameter(), type=int, default=1)
per_page = 1
res = results[(page-per_page)*per_page: page*per_page]
pagination = Pagination(page=page, total=len(results), per_page=per_page, css_framework='bootstrap4')
return render_template('index.html', books=res, request_form=request.form, pagination=pagination)
if __name__ == '__main__':
app.run(debug=True)
위 코드는 다음과 같은 페이지 네이션을 표시합니다.
결과가 검색 결과이면 숫자 2, 3을 클릭하여 페이지 전환을 수행하면 올바른 결과가 표시되지 않습니다.
검색 조건을 저장하지 않으므로 페이지 전환이 발생하면 검색 조건없이 다시 검색됩니다.
(flask-paginate의 페이지 전환은 GET이므로 검색 조건을 얻을 수 없습니다.)
개선 (세션 사용)
검색 조건을 저장하기 위해 검색하기 전에 다음을 수행했습니다.
from flask import Flask, request, redirect, url_for, render_template, flash, session
from flask_paginate import Pagination, get_page_parameter
app = Flask(__name__)
@app.route('/result', methods=['GET', 'POST'])
def show_results():
# request.formを用いた、なんらかの検索
results = [...] # 検索結果(リスト)
page = request.args.get(get_page_parameter(), type=int, default=1)
per_page = 1
res = results[(page-per_page)*per_page: page*per_page]
pagination = Pagination(page=page, total=len(results), per_page=per_page, css_framework='bootstrap4')
return render_template('index.html', books=res, request_form=request.form, pagination=pagination)
if __name__ == '__main__':
app.run(debug=True)
검색 조건을 저장하기 위해 검색하기 전에 다음을 수행했습니다.
from flask import Flask, request, redirect, url_for, render_template, flash, session
from flask_paginate import Pagination, get_page_parameter
app = Flask(__name__)
app.secret_key = b'XXXXXXXXX' # 追加 sessionを利用するために必要
@app.route('/result', methods=['GET', 'POST'])
def show_results():
if request.method == 'POST': # 追加
session['request_form'] = request.form # 追加
request.form = session.get('request_form') # 追加
# request.formを用いた、なんらかの検索
results = [...] # 検索結果(リスト)
page = request.args.get(get_page_parameter(), type=int, default=1)
per_page = 1
res = results[(page-per_page)*per_page: page*per_page]
pagination = Pagination(page=page, total=len(results), per_page=per_page, css_framework='bootstrap4')
return render_template('index.html', books=res, request_form=request.form, pagination=pagination)
if __name__ == '__main__':
app.run(debug=True)
이제 페이지 전환은 session에 저장된 검색 조건에서 검색을 수행하므로 올바른 결과가 표시됩니다.
참고
Flask Paginate(공식)
Flask의 페이지 네이션은 Flask-paginate를 사용하면 쉽게 구현할 수 있습니다.
검색 결과 페이지 네이션 정보 (stack overflow) : Django의 예
Reference
이 문제에 관하여(flask-paginate로 검색결과 페이지화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mctk/items/f1e03e1070479f5e1c9e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(flask-paginate로 검색결과 페이지화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mctk/items/f1e03e1070479f5e1c9e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)