Wie kann ich ein Favicon in meiner Django-App anzeigen lassen?

148

Ich möchte das nur favicon.icoin meinem staticfilesVerzeichnis ablegen und es dann in meiner App anzeigen lassen.

Wie kann ich das erreichen?

Ich habe die favicon.icoDatei in meinem staticfilesVerzeichnis abgelegt , aber sie wird nicht angezeigt und ich sehe dies in meinem Protokoll:

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

Wenn ich zu gehe http://localhost:8000/static/favicon.ico, kann ich das Favicon sehen.

Jononomo
quelle
5
Der Fehler sucht GET /favicon.iconicht GET /static/favicon.icoin http://localhost:8000/static/favicon.icoist nicht verwandt. Es sieht so aus, als ob einige Browser Anfragen nach /favicon.icoHTML stellen.
Uhr eingefroren

Antworten:

168

Wenn Sie eine Basis- oder Header-Vorlage haben, die überall enthalten ist, warum nicht das dortige Favicon mit einfachem HTML einbinden?

<link rel="shortcut icon" type="image/png" href="{% static 'favicon.ico' %}"/>
Hanleyhansen
quelle
Klingt wie eine gute Idee. Können Sie mich auf einen Link verweisen, der erklärt, wie das geht?
Jononomo
3
Ja. So etwas wie:{{STATIC_URL}}favicon.ico
Karthikr
16
Das ist nur ein Beispiel. Passen Sie es an Ihre Bedürfnisse an.
Hanleyhansen
3
Diese Antwort hat bei mir nicht funktioniert, andere Antworten href="{% static 'favicon.ico' %}jedoch.
Bezewy
4
MIME-Typ ( image/png) und Dateiformat ( favicon.ico) stimmen nicht überein.
X-Yuri
122

Ein einfacher Trick besteht darin, eine Umleitung in Ihre urls.pyDatei vorzunehmen , z. B. eine Ansicht wie folgt hinzuzufügen:

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

Dies funktioniert gut als einfacher Trick, um Favoriten zum Laufen zu bringen, wenn Sie nicht wirklich andere statische Inhalte zum Hosten haben.

wim
quelle
3
Ich sehe nicht, wie leicht das ist, verglichen mit dem Hinzufügen von zwei Zeilen zur Vorlage. Und das ist eine Art Trick, den ich in der Produktion nicht verwenden würde.
X-Yuri
16
@ x-yuri Die andere Antwort ist einfacher, wenn Sie überhaupt eine Basisvorlage haben . Der Punkt ist, dass Sie möglicherweise keine Vorlage oder statischen Inhalte haben, sodass STATIC_URL möglicherweise nicht einmal konfiguriert ist. zB ist es eine JSON-API. Sie möchten jedoch weiterhin eine durchsuchbare API, ohne 404-Fehler in Ihren Protokollen zu sehen (Chrome usw. versucht, favicon.ico automatisch anzufordern). Die Verwendung eines solchen RedirectView in der Produktion kann nicht schaden.
wim
56

In der Vorlagendatei

{% load static %}

Dann innerhalb des <head>Tags

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

Dies setzt voraus, dass Sie statische Dateien in settings.py entsprechend konfiguriert haben.


Hinweis : Ältere Versionen von Django verwenden dies load staticfilesnicht load static.

Hareem Adderley
quelle
31

Universelle Lösung

Sie können das Favicon in Django genauso anzeigen lassen wie in jedem anderen Framework: Verwenden Sie einfach reines HTML.

Fügen Sie dem Header Ihrer HTML-Vorlage den folgenden Code hinzu.
Besser zu Ihrer Basis-HTML-Vorlage, wenn das Favicon in Ihrer Anwendung identisch ist.

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

Der vorherige Code setzt voraus:

  1. Sie haben einen Ordner namens 'favicon' in Ihrem statischen Ordner
  2. Die Favicon-Datei hat den Namen 'favicon.png'
  3. Sie haben die Einstellvariable STATIC_URL richtig eingestellt

In diesem Artikel von Wikipedia https://en.wikipedia.org/wiki/Favicon finden Sie nützliche Informationen zur Unterstützung von Dateiformaten und zur Verwendung von Favoriten . Ich kann die Verwendung aus Gründen der universellen Browserkompatibilität empfehlen .
.png

BEARBEITEN:
Wie in einem Kommentar gepostet :
"Vergessen Sie nicht, {% load staticfiles %}oben in Ihre Vorlagendatei einzufügen!"

ePi272314
quelle
Tipp: favicon.ico hat es nicht für mich getan, nach dem Testen mit der Erweiterung .png hat es funktioniert!
Kaya
Sie haben Recht @kaya. Das .ico-Format ist hinsichtlich der Kompatibilität nicht das beste. .Png funktioniert jedoch immer.
ePi272314
15

In Ihrem settings.pyAdd a root Static Verzeichnis:

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

Erstellen /static/images/favicon.ico

Fügen Sie das Favicon Ihrer Vorlage hinzu (base.html):

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

Und erstellen Sie eine URL-Umleitung, urls.pyda Browser nach einem Favicon suchen/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')))
]
Mustapha-Belkacim
quelle
9
<link rel="shortcut icon" href="{% static 'favicon/favicon.ico' %}"/>

Fügen Sie das einfach in Ihre Basisdatei ein, wie die erste Antwort, aber die Erweiterung ico, und fügen Sie es dem statischen Ordner hinzu

A. Raouf
quelle
4

Wenn Sie dann die Erlaubnis haben

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

Fügen Sie Ihrem virtuellen Host einen Alias ​​hinzu. (in der Apache-Konfigurationsdatei) ähnlich für robots.txt

Alias /robots.txt /var/www/---your path ---/PyBot/robots.txt
Saurabh Chandra Patel
quelle
3

Die beste Lösung besteht darin, die Vorlage Django base.html zu überschreiben. Erstellen Sie eine weitere base.html-Vorlage im Administratorverzeichnis. Erstellen Sie zuerst ein Administratorverzeichnis, falls es nicht vorhanden ist.app/admin/base.html.

In {% block extrahead %}der übergeordneten Vorlage.

{% 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 %}
Basant Kumar
quelle
3
        <link rel="shortcut icon" type="image/png" href="{% static 'favicon/sample.png' %}" />

Führen Sie auch Folgendes aus: python manage.py collectstatic

Sanka Nanaji
quelle
2

Ich habe die folgenden Einstellungen in Django 2.1.1 versucht

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>`.............

Projektverzeichnisstruktur

Bild

Live hier ansehen

MAK Azad
quelle
1

Kopieren Sie einfach Ihr Favicon auf: / yourappname / mainapp (ex: core) / static / mainapp (ex: core) / img

Gehen Sie dann zu Ihrer Hauptanwendungsvorlage (z. B. base.html) und kopieren Sie diese nach {% load static%}, da Sie zuerst die Statik laden müssen.

<link href="{% static 'core/img/favi_x.png' %}" rel="shortcut icon" type="image/png" />
Carlos J. Oliva Domínguez
quelle
0

Empfohlene Vorgehensweise :

Im Gegensatz zu Ihrer Meinung kann das Favicon jede Größe und jeden Bildtyp haben. Folgen Sie diesem Link für Details.

Wenn Sie keinen Link zu Ihrem Favicon setzen, kann dies das Laden der Seite verlangsamen.

Angenommen, in einem Django-Projekt lautet der Pfad zu Ihrem Favicon:

myapp/static/icons/favicon.png

Fügen Sie in Ihren Django-Vorlagen (vorzugsweise in der Basisvorlage) diese Zeile zum Kopf der Seite hinzu:

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

Hinweis :

Wir nehmen an, dass die statischen Einstellungen in settings.py gut konfiguriert sind.

Alouani Younes
quelle