User pagination pages (#1464)

* Replace user facing pagination with Flask SQLAlchemy Pagination objects
* Closes #1353

I think this is a big improvement but I feel like this is harder to create a theme construct around.
This commit is contained in:
Kevin Chung
2020-06-02 21:12:24 -04:00
committed by GitHub
parent d04ef66365
commit 97f0beb9ca
4 changed files with 22 additions and 37 deletions

View File

@@ -21,24 +21,14 @@ teams = Blueprint("teams", __name__)
@require_team_mode
def listing():
page = abs(request.args.get("page", 1, type=int))
results_per_page = 50
page_start = results_per_page * (page - 1)
page_end = results_per_page * (page - 1) + results_per_page
# TODO: Should teams confirm emails?
# if get_config('verify_emails'):
# count = Teams.query.filter_by(verified=True, banned=False).count()
# teams = Teams.query.filter_by(verified=True, banned=False).slice(page_start, page_end).all()
# else:
count = Teams.query.filter_by(hidden=False, banned=False).count()
teams = (
Teams.query.filter_by(hidden=False, banned=False)
.slice(page_start, page_end)
.all()
.order_by(Teams.id.asc())
.paginate(page=page, per_page=50)
)
pages = int(count / results_per_page) + (count % results_per_page > 0)
return render_template("teams/teams.html", teams=teams, pages=pages, curr_page=page)
return render_template("teams/teams.html", teams=teams)
@teams.route("/teams/join", methods=["GET", "POST"])

View File

@@ -22,7 +22,7 @@
</tr>
</thead>
<tbody>
{% for team in teams %}
{% for team in teams.items %}
<tr>
<td>
{% if scores_visible() %}
@@ -70,23 +70,23 @@
</table>
</div>
</div>
{% if pages > 1 %}
{% if teams.pages > 1 %}
<div class="row">
<div class="col-md-12">
<div class="text-center">Page
<br>
{% if curr_page != 1 %}
<a href="{{ url_for('teams.listing', page=curr_page-1) }}">
{% if teams.page != 1 %}
<a href="{{ url_for('teams.listing', page=teams.page - 1) }}">
&lt;&lt;&lt;
</a>
{% endif %}
<select class="page-select">
{% for page in range(1, pages + 1) %}
<option {% if curr_page == page %}selected{% endif %}>{{ page }}</option>
{% for page in range(1, teams.pages + 1) %}
<option {% if teams.page == page %}selected{% endif %}>{{ page }}</option>
{% endfor %}
</select>
{% if curr_page != pages %}
<a href="{{ url_for('teams.listing', page=curr_page + 1) }}">
{% if teams.next_num %}
<a href="{{ url_for('teams.listing', page=teams.page + 1) }}">
&gt;&gt;&gt;
</a>
{% endif %}

View File

@@ -22,7 +22,7 @@
</tr>
</thead>
<tbody>
{% for user in users %}
{% for user in users.items %}
<tr>
<td>
{% if scores_visible() %}
@@ -73,23 +73,23 @@
</table>
</div>
</div>
{% if pages > 1 %}
{% if users.pages > 1 %}
<div class="row">
<div class="col-md-12">
<div class="text-center">Page
<br>
{% if curr_page != 1 %}
<a href="{{ url_for('users.listing', page=curr_page - 1) }}">
{% if users.page != 1 %}
<a href="{{ url_for('users.listing', page=users.page - 1) }}">
&lt;&lt;&lt;
</a>
{% endif %}
<select class="page-select">
{% for page in range(1, pages + 1) %}
<option {% if curr_page == page %}selected{% endif %}>{{ page }}</option>
{% for page in range(1, users.pages + 1) %}
<option {% if users.page == page %}selected{% endif %}>{{ page }}</option>
{% endfor %}
</select>
{% if curr_page != pages %}
<a href="{{ url_for('users.listing', page=curr_page + 1) }}">
{% if users.next_num %}
<a href="{{ url_for('users.listing', page=users.page + 1) }}">
&gt;&gt;&gt;
</a>
{% endif %}

View File

@@ -16,19 +16,14 @@ users = Blueprint("users", __name__)
@check_account_visibility
def listing():
page = abs(request.args.get("page", 1, type=int))
results_per_page = 50
page_start = results_per_page * (page - 1)
page_end = results_per_page * (page - 1) + results_per_page
count = Users.query.filter_by(banned=False, hidden=False).count()
users = (
Users.query.filter_by(banned=False, hidden=False)
.slice(page_start, page_end)
.all()
.order_by(Users.id.asc())
.paginate(page=page, per_page=10)
)
pages = int(count / results_per_page) + (count % results_per_page > 0)
return render_template("users/users.html", users=users, pages=pages, curr_page=page)
return render_template("users/users.html", users=users)
@users.route("/profile")