ฉันจะให้ favicon แสดงขึ้นในแอพ django ของฉันได้อย่างไร


148

ฉันแค่ต้องการวางลงfavicon.icoในstaticfilesไดเรกทอรีของฉันแล้วให้มันปรากฏในแอพของฉัน

ฉันจะทำสิ่งนี้ได้อย่างไร

ฉันวางfavicon.icoไฟล์ไว้ในstaticfilesไดเรกทอรีแล้ว แต่มันไม่ปรากฏขึ้นและฉันเห็นสิ่งนี้ในบันทึกของฉัน:

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

ถ้าฉันไปที่http://localhost:8000/static/favicon.icoฉันสามารถเห็น favicon


5
ข้อผิดพลาดที่GET /favicon.icoไม่ได้GET /static/favicon.icoค้นหาhttp://localhost:8000/static/favicon.icoไม่เกี่ยวข้อง ดูเหมือนว่าบางเบราว์เซอร์จะขอ /favicon.icoHTML
แช่แข็ง

คำตอบ:


169

หากคุณมีเทมเพลตฐานหรือส่วนหัวที่รวมอยู่ทุกที่ทำไมไม่รวม favicon ไว้ใน HTML พื้นฐาน

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

ฟังดูเหมือนความคิดที่ดี คุณสามารถชี้ให้ฉันไปที่ลิงก์ที่อธิบายวิธีการทำเช่นนี้ได้หรือไม่?
jononomo

3
ใช่. สิ่งที่ต้องการ:{{STATIC_URL}}favicon.ico
karthikr

16
นั่นเป็นเพียงตัวอย่าง ปรับเปลี่ยนให้เหมาะสมกับความต้องการของคุณ
hanleyhansen

3
คำตอบนี้ไม่ได้ผลสำหรับฉัน แต่คำตอบอื่น ๆ ที่ใช้href="{% static 'favicon.ico' %}ทำ
Bezewy

4
ประเภท MIME ( image/png) และรูปแบบไฟล์ ( favicon.ico) ไม่ตรงกัน
x-yuri

122

เคล็ดลับข้อหนึ่งที่มีน้ำหนักเบาคือทำการเปลี่ยนเส้นทางในurls.pyไฟล์ของคุณเช่นเพิ่มมุมมองดังนี้:

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

วิธีนี้ใช้งานได้ง่ายเช่นเดียวกับเคล็ดลับง่ายๆในการทำให้ favicons ทำงานเมื่อคุณไม่มีเนื้อหาคงที่อื่น ๆ ที่จะโฮสต์


3
ฉันไม่เห็นว่าสิ่งนี้มีน้ำหนักเบาอย่างไรเมื่อเทียบกับการเพิ่มสองบรรทัดลงในเทมเพลต และนี่เป็นกลอุบายที่ฉันจะไม่ใช้ในการผลิต
x-yuri

16
@ x-yuri คำตอบอื่น ๆ ง่ายกว่าถ้าคุณมีเทมเพลตพื้นฐานเลย ประเด็นคือคุณอาจไม่มีเทมเพลตหรือเนื้อหาคงที่ดังนั้น STATIC_URL อาจไม่ได้รับการกำหนดค่า เช่นเป็น json API แต่ยังต้องการ API ที่สามารถเรียกดูได้โดยไม่เห็นข้อผิดพลาด 404 ในบันทึกของคุณ (chrome ฯลฯ จะพยายามขอ favicon.ico โดยอัตโนมัติ) ไม่เป็นอันตรายต่อการใช้ RedirectView ในการผลิต
Wim

56

ในไฟล์เทมเพลต

{% load static %}

จากนั้นภายใน<head>แท็ก

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

สิ่งนี้ถือว่าคุณมีไฟล์สแตติกที่กำหนดค่าไว้ใน settings.py


หมายเหตุ : รุ่นเก่าในการใช้ Django ไม่load staticfilesload static


31

ทางออกสากล

คุณสามารถทำให้ favicon ปรากฏขึ้นใน Django ได้เช่นเดียวกับที่คุณทำได้ในกรอบงานอื่น ๆ : เพียงแค่ใช้ HTML ที่บริสุทธิ์

เพิ่มรหัสต่อไปนี้ในส่วนหัวของแม่แบบ HTML ของคุณ
ดีกว่าไปยังเทมเพลต HTML พื้นฐานของคุณถ้า favicon เหมือนกันในแอปพลิเคชันของคุณ

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

รหัสก่อนหน้านี้ถือว่า:

  1. คุณมีโฟลเดอร์ชื่อ 'favicon' ในโฟลเดอร์คงที่ของคุณ
  2. ไฟล์ favicon มีชื่อ 'favicon.png'
  3. คุณได้ตั้งค่าตัวแปรการตั้งค่าอย่างถูกต้อง STATIC_URL

คุณสามารถค้นหาข้อมูลที่เป็นประโยชน์เกี่ยวกับการสนับสนุนรูปแบบไฟล์และวิธีการใช้ favicons ในบทความของวิกิพีเดียนี้https://en.wikipedia.org/wiki/Favicon
ฉันสามารถแนะนำให้ใช้.pngเพื่อความเข้ากันได้กับเบราว์เซอร์สากล

แก้ไข:
ตามที่โพสต์ในหนึ่งความคิดเห็น
"อย่าลืมเพิ่มที่{% load staticfiles %}ด้านบนของไฟล์แม่แบบของคุณ!"


Tipp: favicon.ico ไม่ได้ทำเพื่อฉันหลังจากการทดสอบด้วย. png extension มันใช้งานได้!
kaya

คุณถูก @kaya รูปแบบ. ico ไม่ได้เป็นสิ่งที่ดีที่สุดเกี่ยวกับความเข้ากันได้ อย่างไรก็ตาม. png ทำงานได้เสมอ
ePi272314

15

ในsettings.pyไดเรกทอรี rootfiles staticfiles ของคุณ:

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

สร้าง /static/images/favicon.ico

เพิ่ม favicon ให้กับเทมเพลตของคุณ (base.html):

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

และสร้างการเปลี่ยนเส้นทาง URL urls.pyเพราะเบราว์เซอร์มองหา 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' %}"/>

เพียงแค่เพิ่มมันในไฟล์ฐานของคุณเช่นคำตอบแรก แต่ส่วนขยาย ico และเพิ่มไปยังโฟลเดอร์คงที่


4

หากคุณได้รับอนุญาตแล้ว

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

เพิ่มนามแฝงในโฮสต์เสมือนของคุณ (ในไฟล์กำหนดค่า apache) ในทำนองเดียวกันสำหรับ robots.txt

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

3

ทางออกที่ดีที่สุดคือแทนที่เทมเพลต Django base.html สร้างเทมเพลต base.html อีกอันภายใต้ไดเรกทอรีผู้ดูแลระบบ สร้างไดเรกทอรี admin ก่อนหากไม่มีอยู่app/admin/base.html.

เพิ่ม{% block extrahead %}ไปยังเทมเพลตที่เอาชนะ

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

นอกจากนี้ยังเรียกใช้: หลาม Manage.py สะสม


2

ฉันลองตั้งค่าต่อไปนี้ใน 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>`.............

โครงสร้างไดเรกทอรีโครงการ

ภาพ

ดูสดที่นี่


1

เพียงแค่คัดลอก favicon ของคุณบน: / yourappname / mainapp (เช่น: core) / static / mainapp (เช่น: core) / img

จากนั้นไปที่เทมเพลต mainapp ของคุณ (เช่น: base.html) และเพียงคัดลอกสิ่งนี้หลังจาก{% load static%}เนื่องจากคุณต้องโหลดสถิตก่อน

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

0

ปฏิบัติที่ดีที่สุด :

ตรงกันข้ามกับสิ่งที่คุณคิดว่า favicon สามารถมีขนาดและรูปแบบใดก็ได้ ไปที่ลิงค์นี้เพื่อดูรายละเอียด

การไม่วางลิงก์ไปยัง favicon ของคุณอาจทำให้การโหลดหน้าเว็บช้าลง

ในโครงการ django สมมติว่าเส้นทางไปยัง favicon ของคุณคือ:

myapp/static/icons/favicon.png

ในแม่แบบ django ของคุณ (โดยเฉพาะในแม่แบบฐาน) ให้เพิ่มบรรทัดนี้ไว้ที่ส่วนหัวของหน้า:

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

บันทึก :

เราคาดว่าการตั้งค่าคงที่จะถูกกำหนดค่าอย่างดีใน settings.py

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.