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.


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' %}"/>

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.


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.


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!"


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')))
]

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


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

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

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

Juga jalankan: python manage.py collectstatic


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


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" />

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.