نحوه اضافه کردن favicon به پروژه های Flask

به طور معمول وقتی وارد هر سایتی میشید قطعا اون بالا توی نوار جستجو یه آیکون کوچیک هست که لوگوی سایت یا برند قرار میگیره که برای pin کردن تب های سایت های شما و ... آیکون خود شماره نشون میده اون بالا و همینطور یه مسیر برای این آیکون هست که با /favicon.ico مشخص میشه یعنی داخل هر سایتی که گزاشته باشن میتونید به مسیر/favicon.ico برید و آیکونشون رو ببینیدبرای مثال فاوا آیکون گوگل رو میتونید برید مسیر https://www.google.com/favicon.ico و ببینید فاواآیکون ویرگولفاوا آیکون گوگل فاوا آیکون گیتهاباما توی Flask ما نمیتونید به فایل های توی Root پروژه به صورت مستقیم مسیر دهی کنیم و ببینیمشونبرای این کار باید خودمون این مسیر هارو بنویسیم اما فقط این نیست برای مسیر هایی مثل robots.txt و sitemap.xml و google verification و غیره که خیلی معقولن که توی سایتمون داشته باشیمشون هم باید یه سری فایل خاص رو توی این مسیر ها قرار بدیم اما اینجوری نیست که بیاییم توی root پروژه امون فایل بزاریم و بریم توی url بزنیم http://127.0.0.1:8080/robots.txt فرض بر اینه دارید روی لوکال تست می کنید :)و بیاد فایل رو نشونمون بده اینجوری بهمون 404 not found میده (مگه اینکه توی تنظیمات وب سرور تنظیم کنید این فایل هارو وب سرور سرو کنه تا وب اپ ما که این روش بهتره )اگر بخواییم اپ ما این کارو کنه باید بیاییم دستی این مسیر هارو تنظیم کنیم که اگر درخواستی اومد چه فایلی رو نشون بده اول برای اینکه توی فایل html امون این فاوا آیکون رو تنظیم کنیم باید بریم به base اصلی template اصلی که داریم ازش استفاده می کنیم و توی head اون لینک بدیم به فایل فاوا آیکون سایتمون <link rel=&quotshortcut icon&quot href=&quot{{ url_for('static', filename='favicon.ico') }}&quot>اینجا اومدیم از طریق تگ link توی html لینک دادیم به مسیر اصلی فاوا آیکون توی سایتمون و rel رو هم برابر با shortcut icon قرار دادیم تا مرورگر متوجه بشه این یه لینک به فاوا آیکون سایت هست اما برای اینکه توی مسیر اصلی سایت ها هم قابل دیدم باشه باید طبق زیر پیش بریم برای این کار توی route های instance اصلی اپ فلسکمون یه view جدید اضافه کنیم برای این کار روش های زیادی وجود داره که با هم چند مورد رو برسی میکنیمتوی این مورد برای /favaicon.icoاول باید یه view مثل کد زیر برای اپ اصلی بنویسیم# favaicon @app.route(&quot/favicon.ico&quot) def favaicon(): &quot&quot&quot redirect user to favaicon page stack overflow do this and redirect user :) &quot&quot&quot try: # redirect user to location of favaicon in static directory return redirect(url_for(&quotstatic&quot ,filename=&quotimages/fava.png&quot)) except Exception as e: print(&quot\n\n Error \n\n&quot) print(e) print(&quot\n\n end of Error \n\n&quot) abort(404)خب توی بالا چیز خاصی اتفاق نیافتاده اول اومدیم مسیر رو تعریف کردیم و بعد با try و except اول سعی کردیم کاربر رو ریدایرکت کنیم به آدرس فاوا آیکون توی مسیر استاتیک سایت اگر هر مشکلی پیش اومد میاد و ارور مارو چاپ میکنه و به کاربر 404 میده این یه روش هست که میشه باهاش این کارو انجام داد # by flask documentation app.add_url_rule('/favicon.ico', redirect_to=url_for('static', filename='favicon.ico'))و یه روش دیگه استفاده از send_from_directory هست import os from flask import send_from_directory @app.route('/favicon.ico') def favicon(): return send_from_directory(os.path.join(app.root_path, 'static'), 'favicon.ico', mimetype='image/vnd.microsoft.icon')برای مطالعه بیشتر به این لینک یه سری بزنید https://flask.palletsprojects.com/en/2.2.x/patterns/favicon/اما روش بهتر اینه این فایل های استاتیک رو بدیم خود webserver ما برامون سرو کنه تا اپلیکیشن ما ...که با توجه به وب سروری که دارید میتونید اینارو با یه سرچ ساده بدست بیارید و تنظیم کنیدروش بهتر هم اینه این کارو بسپاریم به وب سرور تا نه تنها این فایل بلکه تمام فایل های استاتیک مثل css, Js ,pdf,img و غیره اون برای کاربران سرو کنه مرسی که تا ایجاد خوندید :)