From 5f0312e4f0ca07272f2e69a986a43f51bb7354de Mon Sep 17 00:00:00 2001 From: Stef Date: Mon, 11 Aug 2025 15:13:45 +0200 Subject: [PATCH] Add favicon support and static favicon file Added a route to serve /favicon.ico using send_from_directory and included the favicon.ico file in the static directory. This improves browser tab display and branding. --- app.py | 13 ++++++++++++- application/static/favicon.ico | Bin 0 -> 14829 bytes 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 application/static/favicon.ico diff --git a/app.py b/app.py index 5edd909..9d6bf0a 100644 --- a/app.py +++ b/app.py @@ -1,4 +1,10 @@ -from flask import render_template, redirect, url_for, request +from flask import ( + render_template, + redirect, + url_for, + request, + send_from_directory, +) from flask_login import ( login_required, logout_user, @@ -46,6 +52,11 @@ def index(): return redirect(url_for("login")) +@app.route("/favicon.ico") +def favicon(): + return send_from_directory("static", "favicon.ico") + + @app.route("/login", methods=["GET", "POST"]) def login(): if current_user.is_authenticated: diff --git a/application/static/favicon.ico b/application/static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..63d30e603521b916a3b8898baff276d18b7b0725 GIT binary patch literal 14829 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
MXoM@QE;lWoiwf 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 T