roundabout,
created on Tuesday, 11 June 2024, 18:38:11 (1718131091),
received on Wednesday, 31 July 2024, 06:54:49 (1722408889)
Author identity: vlad <vlad.muntoiu@gmail.com>
44b51e77cc10ae47c58b5dac4849a35df62bf2b5
app.py
@@ -123,6 +123,7 @@ def default():
"Markup": Markup,
"locale_names": locale_names,
"set": set, # since using {} is impossible in Jinja
"request": flask.request,
}
@@ -154,12 +155,34 @@ def about():
@app.route("/search")
def search():
query = flask.request.args.get("q")
page_number = flask.request.args.get("page", 1, type=int)
if flask.session.get("username"):
default_page_length = db.session.get(User, flask.session.get("username")).default_page_length
else:
default_page_length = 16
page_length = flask.request.args.get("per_page", default_page_length, type=int)
if not query:
flask.abort(400)
results = Repo.query.filter(Repo.name.ilike(f"%{query}%")).filter_by(visibility=2).all()
results = Repo.query.filter(Repo.name.ilike(f"%{query}%")).filter_by(visibility=2).paginate(
page=page_number, per_page=page_length)
if results.has_next:
next_page = results.next_num
else:
next_page = None
if results.has_prev:
prev_page = results.prev_num
else:
prev_page = None
return flask.render_template("search.html", results=results, query=query)
return flask.render_template("search.html", results=results, query=query,
page_number=page_number,
page_length=page_length,
next_page=next_page,
prev_page=prev_page,
num_pages=results.pages)
@app.route("/language", methods=["POST"])
templates/pagination.html
@@ -1,24 +1,29 @@
<x-hbox id="pagination-options">
<x-hbox id="pagination">
{% if prev_page %}
<a href="?per_page={{ page_length }}&page=1">
<a href="{{ modify_query(per_page=page_length, page=1) }}">
«
</a>
<a href="?per_page={{ page_length }}&page={{ prev_page }}">
<a href="{{ modify_query(per_page=page_length, page=prev_page) }}">
‹
</a>
{% endif %}
<span>{{ page_number }}/{{ num_pages }}</span>
{% if next_page %}
<a href="?per_page={{ page_length }}&page={{ next_page }}">
<a href="{{ modify_query(per_page=page_length, page=next_page) }}">
›
</a>
<a href="?per_page={{ page_length }}&page={{ num_pages }}">
<a href="{{ modify_query(per_page=page_length, page=num_pages) }}">
»
</a>
{% endif %}
</x-hbox>
<form>
{% for key, value in request.args.items() %}
{% if key not in ["page", "per_page"] %}
<input type="hidden" name="{{ key }}" value="{{ value }}">
{% endif %}
{% endfor %}
<x-hbox>
<label>
Items per page:
templates/search.html
@@ -25,6 +25,7 @@
</li>
{% endfor %}
</ul>
{% include "pagination.html" %}
</x-frame>
</x-vbox>
{% endblock %}