diff --git a/app.db b/app.db
index 3162060..c26fc24 100644
Binary files a/app.db and b/app.db differ
diff --git a/app/routes.py b/app/routes.py
index 60090ee..05dfe20 100644
--- a/app/routes.py
+++ b/app/routes.py
@@ -3,7 +3,13 @@ from flask import render_template, flash, redirect, url_for, request
from flask_login import current_user, login_user, logout_user, login_required
from werkzeug.urls import url_parse
from app import app, db
-from app.forms import LoginForm, RegistrationForm, EditProfileForm, EmptyForm, PostForm
+from app.forms import (
+ LoginForm,
+ RegistrationForm,
+ EditProfileForm,
+ EmptyForm,
+ PostForm,
+)
from app.models import User, Post
@@ -14,8 +20,8 @@ def before_request():
db.session.commit()
-@app.route('/', methods=['GET', 'POST'])
-@app.route('/index', methods=['GET', 'POST'])
+@app.route("/", methods=["GET", "POST"])
+@app.route("/index", methods=["GET", "POST"])
@login_required
def index():
form = PostForm()
@@ -23,11 +29,26 @@ def index():
post = Post(body=form.post.data, author=current_user)
db.session.add(post)
db.session.commit()
- flash('Your post is now live!')
- return redirect(url_for('index'))
- posts = current_user.followed_posts().all()
- return render_template("index.html", title='Home Page', form=form,
- posts=posts)
+ flash("Your post is now live!")
+ return redirect(url_for("index"))
+ page = request.args.get("page", 1, type=int)
+ posts = current_user.followed_posts().paginate(
+ page=page, per_page=app.config["POSTS_PER_PAGE"], error_out=False
+ )
+ next_url = (
+ url_for("index", page=posts.next_num) if posts.has_next else None
+ )
+ prev_url = (
+ url_for("index", page=posts.prev_num) if posts.has_prev else None
+ )
+ return render_template(
+ "index.html",
+ title="Home",
+ form=form,
+ posts=posts.items,
+ next_url=next_url,
+ prev_url=prev_url,
+ )
@app.route("/login", methods=["GET", "POST"])
@@ -73,12 +94,29 @@ def register():
@login_required
def user(username):
user = User.query.filter_by(username=username).first_or_404()
- posts = [
- {"author": user, "body": "Test post #1"},
- {"author": user, "body": "Test post #2"},
- ]
+ page = request.args.get("page", 1, type=int)
+ posts = user.posts.order_by(Post.timestamp.desc()).paginate(
+ page=page, per_page=app.config["POSTS_PER_PAGE"], error_out=False
+ )
+ next_url = (
+ url_for("user", username=user.username, page=posts.next_num)
+ if posts.has_next
+ else None
+ )
+ prev_url = (
+ url_for("user", username=user.username, page=posts.prev_num)
+ if posts.has_prev
+ else None
+ )
form = EmptyForm()
- return render_template("user.html", user=user, posts=posts, form=form)
+ return render_template(
+ "user.html",
+ user=user,
+ posts=posts.items,
+ next_url=next_url,
+ prev_url=prev_url,
+ form=form,
+ )
@app.route("/edit_profile", methods=["GET", "POST"])
@@ -138,8 +176,24 @@ def unfollow(username):
else:
return redirect(url_for("index"))
-@app.route('/explore')
+
+@app.route("/explore")
@login_required
def explore():
- posts = Post.query.order_by(Post.timestamp.desc()).all()
- return render_template('index.html', title='Explore', posts=posts)
\ No newline at end of file
+ page = request.args.get("page", 1, type=int)
+ posts = Post.query.order_by(Post.timestamp.desc()).paginate(
+ page=page, per_page=app.config["POSTS_PER_PAGE"], error_out=False
+ )
+ next_url = (
+ url_for("explore", page=posts.next_num) if posts.has_next else None
+ )
+ prev_url = (
+ url_for("explore", page=posts.prev_num) if posts.has_prev else None
+ )
+ return render_template(
+ "index.html",
+ title="Explore",
+ posts=posts.items,
+ next_url=next_url,
+ prev_url=prev_url,
+ )
diff --git a/app/templates/index.html b/app/templates/index.html
index b01d201..6880850 100644
--- a/app/templates/index.html
+++ b/app/templates/index.html
@@ -16,6 +16,12 @@
{% endif %}
{% for post in posts %}
- {% include "_post.html" %}
+ {% include '_post.html' %}
{% endfor %}
+ {% if prev_url %}
+ Newer posts
+ {% endif %}
+ {% if next_url %}
+ Older posts
+ {% endif %}
{% endblock %}s
diff --git a/app/templates/user.html b/app/templates/user.html
index 89e2471..99dda35 100644
--- a/app/templates/user.html
+++ b/app/templates/user.html
@@ -41,4 +41,10 @@
{% for post in posts %}
{% include '_post.html' %}
{% endfor %}
+ {% if prev_url %}
+ Newer posts
+ {% endif %}
+ {% if next_url %}
+ Older posts
+ {% endif %}
{% endblock %}
diff --git a/config.py b/config.py
index 6bed8d8..593c849 100644
--- a/config.py
+++ b/config.py
@@ -15,3 +15,4 @@ class Config(object):
MAIL_USERNAME = os.environ.get("MAIL_USERNAME")
MAIL_PASSWORD = os.environ.get("MAIL_PASSWORD")
ADMINS = ["your-email@example.com"]
+ POSTS_PER_PAGE = 25