Come posso ottenere una favicon da mostrare nella mia app django?


148

Voglio solo rilasciare favicon.iconella mia staticfilesdirectory e poi mostrarlo nella mia app.

Come posso ottenere questo?

Ho inserito il favicon.icofile nella mia staticfilesdirectory, ma non viene visualizzato e lo vedo nel mio registro:

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

Se vado a http://localhost:8000/static/favicon.ico, posso vedere la favicon.


5
L'errore è GET /favicon.iconon GET /static/favicon.icoguardando in http://localhost:8000/static/favicon.iconon è correlato. Sembra che alcune richieste del browser /favicon.icodisprezzino l'HTML.
Congelato il

Risposte:


168

Se hai un modello di base o di intestazione incluso ovunque, perché non includere la favicon lì con HTML di base?

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

Sembra una buona idea. Puoi indicarmi un link che spiega come farlo?
jononomo,

3
Si. Qualcosa del tipo:{{STATIC_URL}}favicon.ico
karthikr,

16
Questo è solo un esempio. Modificalo per adattarlo alle tue esigenze.
Hanleyhansen,

3
Questa risposta non ha funzionato per me, ma altre risposte che hanno usato hanno href="{% static 'favicon.ico' %}fatto.
Bezewy,

4
Il tipo MIME ( image/png) e il formato file ( favicon.ico) non corrispondono.
X-Yuri,

122

Un trucco leggero consiste nel reindirizzare il tuo urls.pyfile, ad esempio aggiungere una vista in questo modo:

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

Funziona bene come un semplice trucco per far funzionare le favicon quando non si dispone di altri contenuti statici da ospitare.


3
Non vedo quanto sia leggero, rispetto all'aggiunta di due righe al modello. E questo è un tipo di trucco che non userei in produzione.
X-yuri,

16
@ x-yuri L'altra risposta è più semplice, se hai un modello di base . Il punto è che potresti non avere alcun modello o contenuto statico, quindi STATIC_URL potrebbe non essere nemmeno configurato. ad es. è un'API json. ma vuoi comunque un'API navigabile senza vedere 404 errori nei tuoi log (Chrome ecc. proverà a richiedere automaticamente favicon.ico). Non è dannoso utilizzare tale RedirectView in produzione.
mercoledì

56

Nel file modello

{% load static %}

Quindi all'interno del <head>tag

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

Ciò presuppone che i file statici siano configurati in modo appropriato in settings.py.


Nota : load staticfilesnon usano versioni precedenti di Django load static.


31

Soluzione universale

Puoi ottenere la favicon mostrata in Django nello stesso modo in cui puoi fare in qualsiasi altro framework: basta usare HTML puro.

Aggiungi il seguente codice all'intestazione del tuo modello HTML.
Meglio, al tuo modello HTML di base se la favicon è la stessa in tutta la tua applicazione.

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

Il codice precedente presuppone:

  1. Hai una cartella denominata 'favicon' nella tua cartella statica
  2. Il file favicon ha il nome 'favicon.png'
  3. Hai impostato correttamente la variabile di impostazione STATIC_URL

Puoi trovare informazioni utili sul supporto del formato di file e su come usare le favicon in questo articolo di Wikipedia https://en.wikipedia.org/wiki/Favicon .
Posso raccomandare l'uso .pngper la compatibilità universale del browser.

EDIT:
come pubblicato in un commento,
"Non dimenticare di aggiungere {% load staticfiles %}in cima al tuo file modello!"


Tipp: favicon.ico non l'ha fatto per me, dopo aver provato con l'estensione .png ha funzionato!
Kaya,

Hai ragione @kaya. Il formato .ico non è il migliore per quanto riguarda la compatibilità. Comunque .png funziona sempre.
ePi272314

15

Nel tuo settings.pyaggiungi una directory rootfile statica:

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

Creare /static/images/favicon.ico

Aggiungi la favicon al tuo modello (base.html):

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

E crea un reindirizzamento URL urls.pyperché i browser cercano una favicon/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')))
]

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

Aggiungilo nel tuo file di base come prima risposta ma estensione ico e aggiungilo alla cartella statica


4

se hai il permesso allora

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

aggiungi alias al tuo host virtuale. (nel file di configurazione di Apache) in modo simile per robots.txt

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

3

La soluzione migliore è sovrascrivere il modello Django base.html. Crea un altro modello base.html nella directory admin. Crea prima una directory di amministrazione se non esiste.app/admin/base.html.

Aggiungi {% block extrahead %}al modello prioritario.

{% 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 %}

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

Esegui anche: python manage.py collectstatic


2

Ho provato le seguenti impostazioni 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>`.............

Struttura della directory di progetto

Immagine

guarda dal vivo qui


1

Copia il tuo favicon su: / yourappname / mainapp (ex: core) / static / mainapp (ex: core) / img

Quindi vai al tuo modello mainapp (es: base.html) e copia questo, dopo {% load static%} perché devi prima caricare la statica.

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

0

Migliori pratiche :

Contrariamente a quanto si possa pensare, la favicon può essere di qualsiasi dimensione e di qualsiasi tipo di immagine. Segui questo link per i dettagli.

Non inserire un collegamento alla tua favicon può rallentare il caricamento della pagina.

In un progetto django, supponiamo che il percorso per la tua favicon sia:

myapp/static/icons/favicon.png

nei tuoi modelli di django (preferibilmente nel modello di base), aggiungi questa riga a capo della pagina:

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

Nota :

Supponiamo che le impostazioni statiche siano ben configurate in settings.py.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.