web-dev-qa-db-fra.com

Comment puis-je obtenir un favicon pour apparaître dans mon application Django?

Je veux juste déposer le favicon.ico dans mon répertoire staticfiles, puis l'afficher dans mon application.

Comment puis-je accomplir cela?

J'ai placé le fichier favicon.ico dans mon répertoire staticfiles, mais il ne s'affiche pas et je le vois dans mon journal:

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

Si je vais à http://localhost:8000/static/favicon.ico, je peux voir le favicon.

101
jononomo

Si vous avez un modèle de base ou en-tête inclus partout, pourquoi ne pas inclure le favicon dans le HTML de base?

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

Une astuce légère consiste à effectuer une redirection dans votre fichier urls.py, par exemple. ajouter une vue comme celle-ci:

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),
    ...
]

Cela fonctionne bien comme un truc facile pour faire fonctionner les favicons quand vous n'avez pas vraiment d'autre contenu statique à héberger. 

90
wim

Dans un fichier modèle

{% load staticfiles %}

Puis dans la balise <head>

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

Cela suppose que vous ayez des fichiers statiques configurés correctement dans settings.py.

49
Hareem Adderley

Solution universelle

Vous pouvez obtenir le favicon dans Django de la même manière que dans n'importe quel autre framework: utilisez simplement du HTML pur.

Ajoutez le code suivant à l'en-tête de votre modèle HTML.
Mieux, utilisez votre modèle HTML de base si l’icône de favicon est identique dans votre application.

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

Le code précédent suppose:

  1. Vous avez un dossier nommé 'favicon' dans votre dossier statique
  2. Le fichier favicon a pour nom 'favicon.png'
  3. Vous avez correctement défini la variable de réglage STATIC_URL

Vous pouvez trouver des informations utiles sur le support du format de fichier et l'utilisation des favicons dans cet article de Wikipedia https://en.wikipedia.org/wiki/Favicon .
Je peux recommander l’utilisation de .png pour une compatibilité de navigateur universelle. 

MODIFIER:
Tel que publié dans un commentaire,
"N'oubliez pas d'ajouter {% load staticfiles %} en haut de votre fichier de modèle!"

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

Il suffit d’ajouter cela dans le fichier de base comme la première réponse, mais avec l’extension ico, et de l’ajouter au dossier statique

7
A.Raouf

J'ai essayé les paramètres suivants dans 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>`.............

Structure du répertoire du projet

 Image

voir en direct ici

2
MAK Azad

si vous avez la permission alors

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

ajoutez un alias à votre hôte virtuel. (dans le fichier de configuration Apache) de la même manière pour le fichier robots.txt

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

La meilleure solution consiste à remplacer le modèle Django base.html. Créez un autre modèle base.html sous le répertoire admin. Créez d'abord un répertoire admin s'il n'existe pas. app/admin/base.html.

Ajoutez {% block extrahead %} au modèle de remplacement. 

{% 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 %}
2
Basant Kumar

Dans votre settings.py ajoutez un répertoire rootfiles:

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

Créer /static/images/favicon.ico

Ajoutez le favicon à votre modèle (base.html):

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

Et créez une redirection d’URL dans urls.py car les navigateurs recherchent un favicon dans /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')))
]
1
Mustapha-Belkacim

Les meilleures pratiques : 

Contrairement à ce que l'on pourrait penser, le favicon peut être de toute taille et de tout type d'image. Suivez ce lien pour plus de détails.

Ne pas mettre de lien vers votre favicon peut ralentir le chargement de la page.

Dans un projet Django, supposons que le chemin d'accès à votre favicon soit: 

myapp/static/icons/favicon.png

dans vos modèles Django (de préférence dans le modèle de base), ajoutez cette ligne à l'en-tête de la page:

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

Remarque : 

Nous supposons que les paramètres statiques sont bien configurés dans settings.py. 

0
Alouani Younes