Làm thế nào tôi có thể có được một favicon để hiển thị trong ứng dụng django của tôi?


148

Tôi chỉ muốn thả nó favicon.icotrong staticfilesthư mục của tôi và sau đó nó sẽ hiển thị trong ứng dụng của tôi.

Làm thế nào tôi có thể thực hiện điều này?

Tôi đã đặt favicon.icotệp trong staticfilesthư mục của mình , nhưng nó không hiển thị và tôi thấy điều này trong nhật ký của mình:

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

Nếu tôi đi đến http://localhost:8000/static/favicon.ico, tôi có thể thấy favicon.


5
Các lỗi GET /favicon.icokhông GET /static/favicon.icotìm kiếm http://localhost:8000/static/favicon.icokhông liên quan. Có vẻ như một số trình duyệt yêu cầu xem thường /favicon.icoHTML.
đóng băng

Câu trả lời:


168

Nếu bạn có một mẫu cơ sở hoặc tiêu đề được bao gồm ở mọi nơi tại sao không bao gồm favicon ở đó với HTML cơ bản?

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

Nghe có vẻ như một ý tưởng tốt. Bạn có thể chỉ cho tôi một liên kết giải thích làm thế nào để làm điều này?
jononomo

3
Vâng. Một cái gì đó như:{{STATIC_URL}}favicon.ico
karthikr

16
Đó chỉ là một ví dụ. Sửa đổi nó để phù hợp với nhu cầu của bạn.
hanleyhansen

3
Câu trả lời này không hiệu quả với tôi nhưng những câu trả lời khác đã sử dụng href="{% static 'favicon.ico' %}.
Bezewy

4
Loại MIME ( image/png) và định dạng tệp ( favicon.ico) không khớp.
x-yuri

122

Một mẹo nhẹ là tạo chuyển hướng trong urls.pytệp của bạn , ví dụ: thêm chế độ xem như sau:

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

Điều này hoạt động tốt như một mẹo dễ dàng để khiến favicon hoạt động khi bạn không thực sự có nội dung tĩnh khác để lưu trữ.


3
Tôi không thấy cách này nhẹ, so với việc thêm hai dòng vào mẫu. Và đây là loại mẹo tôi sẽ không sử dụng trong sản xuất.
x-yuri

16
@ x-yuri Câu trả lời khác dễ hơn, nếu bạn có một mẫu cơ sở nào cả . Vấn đề là bạn có thể không có bất kỳ mẫu hoặc nội dung tĩnh nào, vì vậy STATIC_URL thậm chí có thể không được định cấu hình. ví dụ: đó là API json. nhưng vẫn muốn API có thể duyệt mà không thấy lỗi 404 trong nhật ký của bạn (chrome, v.v. sẽ cố gắng tự động yêu cầu favicon.ico). Không có hại khi sử dụng RedirectView trong sản xuất.
wim

56

Trong tệp mẫu

{% load static %}

Sau đó trong <head>thẻ

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

Điều này giả định rằng bạn có các tệp tĩnh được định cấu hình phù hợp trong settings.py.


Lưu ý : phiên bản cũ hơn của Django sử dụng load staticfiles, không load static.


31

Giải pháp phổ quát

Bạn có thể nhận được favicon hiển thị trong Django giống như cách bạn có thể làm trong bất kỳ khuôn khổ nào khác: chỉ cần sử dụng HTML thuần túy.

Thêm mã sau vào tiêu đề của mẫu HTML của bạn.
Tốt hơn, với mẫu HTML cơ sở của bạn nếu favicon giống nhau trên ứng dụng của bạn.

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

Mã trước giả định:

  1. Bạn có một thư mục có tên 'favicon' trong thư mục tĩnh của bạn
  2. Tệp favicon có tên 'favicon.png'
  3. Bạn đã đặt đúng biến cài đặt STATIC_URL

Bạn có thể tìm thấy thông tin hữu ích về hỗ trợ định dạng tệp và cách sử dụng favicon trong bài viết này của Wikipedia https://en.wikipedia.org/wiki/Favicon .
Tôi có thể khuyên bạn nên sử dụng .pngđể tương thích trình duyệt phổ quát.

EDIT:
Như được đăng trong một bình luận,
"Đừng quên thêm {% load staticfiles %}vào đầu tệp mẫu của bạn!"


Tipp: favicon.ico đã không làm điều đó cho tôi, sau khi thử nghiệm với phần mở rộng .png, nó đã hoạt động!
kaya

Bạn nói đúng @kaya. Định dạng .ico không phải là tốt nhất về khả năng tương thích. Tuy nhiên .png luôn hoạt động.
ePi272314

15

Trong thư mục settings.pythêm tệp gốc của bạn :

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

Tạo nên /static/images/favicon.ico

Thêm favicon vào mẫu của bạn (base.html):

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

Và tạo một chuyển hướng url trong urls.pyvì các trình duyệt tìm kiếm một favicon trong/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' %}"/>

Chỉ cần thêm nó trong tệp cơ sở của bạn như câu trả lời đầu tiên nhưng phần mở rộng ico và thêm nó vào thư mục tĩnh


4

nếu bạn được phép

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

thêm bí danh vào máy chủ ảo của bạn. (trong tệp cấu hình apache) tương tự cho robot.txt

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

3

Giải pháp tốt nhất là ghi đè lên mẫu Dj.html base.html. Tạo một mẫu base.html khác trong thư mục quản trị. Tạo một thư mục quản trị đầu tiên nếu nó không tồn tại.app/admin/base.html.

Thêm vào {% block extrahead %}mẫu ghi đè.

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

Cũng chạy: python Manage.py collstatic


2

Tôi đã thử các cài đặt sau trong django 2.1.1

cơ sở.html

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

cài đặt

 STATIC_ROOT = os.path.join(BASE_DIR, 'static')
 STATIC_URL = '/static/'` <br>`.............

Cấu trúc thư mục dự án

Hình ảnh

xem trực tiếp tại đây


1

Chỉ cần sao chép favicon của bạn trên: / yourappname / mainapp (ví dụ: core) / static / mainapp (ex: core) / img

Sau đó, đi đến mẫu ứng dụng chính của bạn (ví dụ: base.html) và chỉ sao chép này, sau {% tải tĩnh%} vì trước tiên bạn phải tải các số liệu thống kê.

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

0

Thực hành tốt nhất :

Trái với những gì bạn có thể nghĩ, favicon có thể có kích thước bất kỳ và bất kỳ loại hình ảnh nào. Nhấn vào link này để biết chi tiết.

Không đặt một liên kết đến favicon của bạn có thể làm chậm tải trang.

Trong một dự án django, giả sử đường dẫn đến favicon của bạn là:

myapp/static/icons/favicon.png

trong các mẫu django của bạn (tốt nhất là trong mẫu cơ sở), hãy thêm dòng này vào đầu trang:

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

Ghi chú :

Chúng tôi cho rằng, các cài đặt tĩnh được định cấu hình tốt trong settings.txt.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.