Bagaimana saya bisa mendapatkan favicon untuk muncul di aplikasi Django saya?

148

Saya hanya ingin meletakkan favicon.icodi staticfilesdirektori saya dan kemudian muncul di aplikasi saya.

Bagaimana saya bisa mencapai ini?

Saya telah meletakkan favicon.icofile di staticfilesdirektori saya , tetapi tidak muncul dan saya melihatnya di log saya:

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

Jika saya pergi ke http://localhost:8000/static/favicon.ico, saya bisa melihat favicon.

jononomo
sumber
5
Kesalahan GET /favicon.icotidak GET /static/favicon.icomelihat http://localhost:8000/static/favicon.icotidak terkait. Sepertinya beberapa permintaan browser untuk /favicon.icomenghina HTML.
dibekukan

Jawaban:

168

Jika Anda memiliki template dasar atau header yang disertakan di mana-mana mengapa tidak menyertakan favicon di sana dengan HTML dasar?

<link rel="shortcut icon" type="image/png" href="{% static 'favicon.ico' %}"/>
Hanleyhansen
sumber
Kedengarannya seperti ide yang bagus. Bisakah Anda mengarahkan saya ke tautan yang menjelaskan cara melakukan ini?
jononomo
3
Ya. Sesuatu seperti:{{STATIC_URL}}favicon.ico
karthikr
16
Itu hanya sebuah contoh. Ubah sesuai kebutuhan Anda.
hanleyhansen
3
Jawaban ini tidak berhasil untuk saya, tetapi jawaban lain yang digunakan href="{% static 'favicon.ico' %}berhasil.
Bezewy
4
Jenis MIME ( image/png) dan format file ( favicon.ico) tidak cocok.
x-yuri
122

Salah satu trik ringan adalah membuat pengalihan dalam urls.pyfile Anda , misalnya menambahkan tampilan seperti:

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

Ini berfungsi dengan baik sebagai trik mudah untuk membuat favicons berfungsi ketika Anda tidak benar-benar memiliki konten statis lainnya untuk di-host.

wim
sumber
3
Saya tidak melihat bagaimana ini ringan, dibandingkan dengan menambahkan dua baris ke templat. Dan ini semacam trik yang tidak akan saya gunakan dalam produksi.
x-yuri
16
@ x-yuri Jawaban lainnya lebih mudah, jika Anda memiliki template dasar sama sekali . Intinya adalah Anda mungkin tidak memiliki template atau konten statis, sehingga STATIC_URL bahkan tidak dapat dikonfigurasi. misalnya itu API json. tetapi masih menginginkan API yang dapat dijelajahi tanpa melihat 404 kesalahan dalam log Anda (chrome dll akan mencoba untuk meminta favicon.ico secara otomatis). Tidak ada salahnya menggunakan RedirectView dalam produksi.
wim
56

Dalam file template

{% load static %}

Kemudian di dalam <head>tag

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

Ini mengasumsikan bahwa Anda memiliki file statis yang dikonfigurasi dengan tepat di settings.py.


Catatan : versi lama penggunaan Django load staticfiles, tidak load static.

Hareem Adderley
sumber
31

Solusi universal

Anda bisa mendapatkan favicon muncul di Django dengan cara yang sama yang dapat Anda lakukan dalam kerangka kerja lain: cukup gunakan HTML murni.

Tambahkan kode berikut ke header template HTML Anda.
Lebih baik, ke template HTML dasar Anda jika favicon adalah sama di aplikasi Anda.

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

Kode sebelumnya mengasumsikan:

  1. Anda memiliki folder bernama 'favicon' di folder statis Anda
  2. File favicon memiliki nama 'favicon.png'
  3. Anda telah menetapkan variabel pengaturan STATIC_URL dengan benar

Anda dapat menemukan informasi yang berguna tentang dukungan format file dan cara menggunakan favicon di artikel Wikipedia ini https://en.wikipedia.org/wiki/Favicon .
Saya dapat merekomendasikan penggunaan .pnguntuk kompatibilitas browser universal.

EDIT:
Seperti yang diposting dalam satu komentar,
"Jangan lupa menambahkan {% load staticfiles %}di bagian atas file template Anda!"

ePi272314
sumber
Tipp: favicon.ico tidak melakukannya untuk saya, setelah pengujian dengan ekstensi .png berhasil!
kaya
Anda benar @kaya. Format .ico bukan yang terbaik untuk kompatibilitas. Namun .png selalu berhasil.
ePi272314
15

Di settings.pydirektori add staticfiles root Anda:

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

Membuat /static/images/favicon.ico

Tambahkan favicon ke templat Anda (base.html):

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

Dan buat url redirect di urls.pykarena browser mencari favicon di/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
sumber
9
<link rel="shortcut icon" href="{% static 'favicon/favicon.ico' %}"/>

Cukup tambahkan itu di file dasar Anda seperti jawaban pertama tetapi ekstensi ico dan tambahkan ke folder statis

A.Raouf
sumber
4

jika Anda memiliki izin

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

tambahkan alias ke host virtual Anda. (dalam file konfigurasi apache) sama untuk robots.txt

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

Solusi terbaik adalah mengganti template Django base.html. Buat templat base.html lain di bawah direktori admin. Buat direktori admin terlebih dahulu jika tidak ada.app/admin/base.html.

Tambahkan {% block extrahead %}ke template utama.

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

Juga jalankan: python manage.py collectstatic

sanka nanaji
sumber
2

Saya mencoba pengaturan berikut di 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>`.............

Struktur direktori proyek

Gambar

lihat langsung di sini

MAK Azad
sumber
1

Cukup salin favicon Anda di: / yourappname / mainapp (mis: inti) / statis / mainapp (mis: inti) / img

Lalu pergi ke templat mainapp Anda (mis: base.html) dan salin saja ini, setelah {% load static%} karena Anda harus memuat dulu statika.

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

Praktik terbaik :

Berlawanan dengan apa yang Anda pikirkan, favicon dapat dari berbagai ukuran dan jenis gambar apa pun. Ikuti tautan ini untuk detailnya.

Tidak menempatkan tautan ke favicon Anda dapat memperlambat pemuatan halaman.

Dalam proyek Django, anggaplah jalan menuju favicon Anda adalah:

myapp/static/icons/favicon.png

di templat Django Anda (lebih disukai di templat dasar), tambahkan baris ini ke kepala halaman:

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

Catatan :

Kami mengira, pengaturan statis dikonfigurasi dengan baik di settings.py.

Alouani Younes
sumber