How can I get a favicon to show up in my django app?

DjangoFavicon

Django Problem Overview


I just want to drop the favicon.ico in my staticfiles directory and then have it show up in my app.

How can I accomplish this?

I have placed the favicon.ico file in my staticfiles directory, but it doesn't show up and I see this in my log:

127.0.0.1 - - [21/Feb/2014 10:10:53] "GET /favicon.ico HTTP/1.1" 404 -

If I go to http://localhost:8000/static/favicon.ico, I can see the favicon.

Django Solutions


Solution 1 - Django

If you have a base or header template that's included everywhere why not include the favicon there with basic HTML?

<link rel="shortcut icon" type="image/png" href="{% static 'favicon.ico' %}"/>

Solution 2 - Django

One lightweight trick is to make a redirect in your urls.py file, e.g. add a view like so:

from django.views.generic.base import RedirectView

favicon_view = RedirectView.as_view(url='/static/favicon.ico', permanent=True)

urlpatterns = [
    ...
    re_path(r'^favicon\.ico$', favicon_view),
    ...
]

This works well as an easy trick for getting favicons working when you don't really have other static content to host.

Solution 3 - Django

In template file

{% load static %}

Then within <head> tag

<link rel="shortcut icon" href="{%  static 'favicon.ico' %}">

This assumes that you have static files configured appropiately in settings.py.


Note: older versions of Django use load staticfiles, not load static.

Solution 4 - Django

Universal solution

You can get the favicon showing up in Django the same way you can do in any other framework: just use pure HTML.

Add the following code to the header of your HTML template.
Better, to your base HTML template if the favicon is the same across your application.

<link rel="shortcut icon" href="{% static 'favicon/favicon.png' %}"/>

The previous code assumes:

  1. You have a folder named 'favicon' in your static folder
  2. The favicon file has the name 'favicon.png'
  3. You have properly set the setting variable STATIC_URL

You can find useful information about file format support and how to use favicons in this article of Wikipedia https://en.wikipedia.org/wiki/Favicon.<br> I can recommend use .png for universal browser compatibility.

EDIT:
As posted in one comment,
"Don't forget to add {% load staticfiles %} in top of your template file!"

Solution 5 - Django

In your settings.py add a root staticfiles directory:

   STATICFILES_DIRS = [
        os.path.join(BASE_DIR, 'static')
        ]

Create /static/images/favicon.ico

Add the favicon to your template(base.html):

{% load static %}
<link rel="shortcut icon" type="image/png" href="{% static 'images/favicon.ico' %}"/>

And create a url redirect in urls.py because browsers look for a favicon in /favicon.ico

from django.contrib.staticfiles.storage import staticfiles_storage
from django.views.generic.base import RedirectView

urlpatterns = [
    ...
    path('favicon.ico', RedirectView.as_view(url=staticfiles_storage.url('images/favicon.ico')))
]

Solution 6 - Django

<link rel="shortcut icon" href="{% static 'favicon/favicon.ico' %}"/>

Just add that in ur base file like first answer but ico extension and add it to the static folder

Solution 7 - Django

I tried the following settings in django 2.1.1

base.html
<head>
  {% load static %}
  <link rel="shortcut icon" type="image/png" href="{% static 'images/favicon.ico' %}"/>
</head>
settings.py
 STATIC_ROOT = os.path.join(BASE_DIR, 'static')
 STATIC_URL = '/static/'` <br>`.............
Project directory structure

Image

view live here

Solution 8 - Django

        <link rel="shortcut icon" type="image/png" href="{% static 'favicon/sample.png' %}" />

Also run: python manage.py collectstatic

Solution 9 - Django

if you have permission then

Alias /favicon.ico /var/www/aktel/workspace1/PyBot/PyBot/static/favicon.ico

add alias to your virtual host. (in apache config file ) similarly for robots.txt

Alias /robots.txt /var/www/---your path ---/PyBot/robots.txt

Solution 10 - Django

First

Upload your favicon.ico to your app static path, or the path you configured by STATICFILES_DIRS in settings.py

Second

In app base template file:

{% load static %}
<link rel="shortcut icon" type="image/png" href="{% static 'favicon.ico' %}"/>

You can make apps use different favicon.ico files here.

Third

In project/urls.py

from django.templatetags.static import static

Add this path to your urlpatterns base location

path('favicon.ico', RedirectView.as_view(url=static('favicon.ico'))),

This can let installed app(like admin, which you should not change the templates) and the app you forget modify the templates , also show a default favicon.ico

Solution 11 - Django

The best solution is to override the Django base.html template. Make another base.html template under admin directory. Make an admin directory first if it does not exist. app/admin/base.html.

Add {% block extrahead %} to the overriding template.

{% extends 'admin/base.html' %}
{% load staticfiles %}
{% block javascripts %}
    {{ block.super }}
<script type="text/javascript" src="{% static 'app/js/action.js' %}"></script>

{% endblock %}
 
{% block extrahead %}
    <link rel="shortcut icon" href="{% static 'app/img/favicon.ico'  %}" />
{% endblock %}
{% block stylesheets %}

    {{ block.super }}
{% endblock %}

Solution 12 - Django

Came across this while looking for help. I was trying to implement the favicon in my Django project and it was not showing -- wanted to add to the conversation.

While trying to implement the favicon in my Django project I renamed the 'favicon.ico' file to 'my_filename.ico' –– the image would not show. After renaming to 'favicon.ico' resolved the issue and graphic displayed. below is the code that resolved my issue:

<link rel="shortcut icon" type="image/png" href="{% static 'img/favicon.ico' %}" />

Solution 13 - Django

Just copy your favicon on: /yourappname/mainapp(ex:core)/static/mainapp(ex:core)/img

Then go to your mainapp template(ex:base.html) and just copy this, after {% load static %} because you must load first the statics.

<link href="{% static 'core/img/favi_x.png' %}" rel="shortcut icon" type="image/png" />

Solution 14 - Django

Now(in 2020), You could add a base tag in html file.

<head>
<base href="https://www.example.com/static/"> 
</head>

Solution 15 - Django

Best practices :

Contrary to what you may think, the favicon can be of any size and of any image type. Follow this link for details.

Not putting a link to your favicon can slow down the page load.

In a django project, suppose the path to your favicon is :

myapp/static/icons/favicon.png

in your django templates (preferably in the base template), add this line to head of the page :

<link rel="shortcut icon" href="{%  static 'icons/favicon.png' %}">

Note :

We suppose, the static settings are well configured in settings.py.

Solution 16 - Django

Sometimes restarting the server helps.

  1. Stop the server and then rerun the command: python manage.py runserver

  2. Now your CSS file should be loaded.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestiontadasajonView Question on Stackoverflow
Solution 1 - DjangohanleyhansenView Answer on Stackoverflow
Solution 2 - DjangowimView Answer on Stackoverflow
Solution 3 - DjangoKing LeonView Answer on Stackoverflow
Solution 4 - DjangoePi272314View Answer on Stackoverflow
Solution 5 - DjangoMustapha-BelkacimView Answer on Stackoverflow
Solution 6 - DjangoA.RaoufView Answer on Stackoverflow
Solution 7 - DjangoMAK AzadView Answer on Stackoverflow
Solution 8 - Djangosanka nanajiView Answer on Stackoverflow
Solution 9 - DjangoSaurabh Chandra PatelView Answer on Stackoverflow
Solution 10 - DjangotinyhareView Answer on Stackoverflow
Solution 11 - DjangoBasant KumarView Answer on Stackoverflow
Solution 12 - DjangoTeo HermanView Answer on Stackoverflow
Solution 13 - DjangocolidomView Answer on Stackoverflow
Solution 14 - DjangoVed NigView Answer on Stackoverflow
Solution 15 - DjangoAlouani YounesView Answer on Stackoverflow
Solution 16 - DjangoUtkarsh-29View Answer on Stackoverflow