Як я можу змусити фавікон відображатися в додатку джанго?


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, я можу побачити фавікон.


5
Помилка GET /favicon.icoне GET /static/favicon.icoшукає http://localhost:8000/static/favicon.icoне пов’язана. Схоже, деякі запити браузерів для /favicon.icoзневірених HTML.
заморожено

Відповіді:


169

Якщо у вас є базовий шаблон або шаблон заголовка, який міститься скрізь, чому б не включити туди фавікон з базовим 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),
    ...
]

Це добре працює як простий трюк для роботи фавіконів, коли у вас немає іншого статичного вмісту для розміщення.


3
Я не бачу, наскільки це легка вага порівняно з додаванням до рядка двох рядків. І це такий трюк, який я б не використовував у виробництві.
x-yuri

16
@ x-yuri Інша відповідь простіше, якщо у вас взагалі є базовий шаблон . Справа в тому, що у вас може бути немає шаблону чи статичного вмісту, тому STATIC_URL може навіть не бути налаштований. наприклад, це API json. але все ж хочете переглядати API, не бачачи 404 помилок у ваших журналах (хром тощо намагатиметься запитувати favicon.ico автоматично). Немає шкоди використовувати такий RedirectView у виробництві.
Вім

56

У файлі шаблону

{% load static %}

Потім у межах <head>тегу

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

Це передбачає, що у вас є статичні файли, налаштовані відповідним чином у settings.py.


Примітка : старіші версії використання Django load staticfiles, ні load static.


31

Універсальне рішення

Ви можете відобразити фавікон у Django так само, як у будь-яких інших рамках: просто використовуйте чистий HTML.

Додайте наступний код до заголовка шаблону HTML.
Краще, до вашого базового шаблону HTML, якщо фавікон однаковий у вашій програмі.

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

Попередній код передбачає:

  1. У вашій статичній папці є папка з назвою "favicon"
  2. Файл favicon має ім'я 'favicon.png'
  3. Ви правильно встановили змінну налаштування STATIC_URL

У цій статті Вікіпедії https://en.wikipedia.org/wiki/Favicon ви можете знайти корисну інформацію про підтримку формату файлів та використання файлів . Я можу рекомендувати використовувати
.png для універсальної сумісності браузера.

РЕДАКТУВАННЯ:
Як розміщено в одному коментарі,
"Не забудьте додати {% load staticfiles %}верхній файл шаблону!"


Підказка: favicon.ico не зробив це для мене, після тестування з розширенням .png він працював!
кая

Ви маєте рацію @kaya. Формат .ico не найкращий щодо сумісності. Однак .png завжди працює.
ePi272314

15

У своєму settings.pyдодаванні кореневого каталогу staticfiles:

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

Створіть /static/images/favicon.ico

Додайте фавікон у свій шаблон (base.html):

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

І створіть переспрямування URL, urls.pyоскільки веб-переглядачі шукають фавікон/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 під каталогом адміністратора. Створіть спочатку каталог адміністратора, якщо він не існує.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' %}" />

Також запустіть: python Manag.py collectionstatic


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

Просто скопіюйте свій фавікон на: / yourappname / mainapp (наприклад: core) / static / mainapp (ex: core) / img

Потім перейдіть до шаблону mainapp (наприклад: base.html) і просто скопіюйте це, після {% load static%}, оскільки ви повинні спочатку завантажити статику.

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

0

Кращі практики :

Всупереч тому, що вам здається, фавікон може бути будь-якого розміру і будь-якого типу зображення. Докладніше перейдіть за цим посиланням.

Якщо розмістити посилання на фавікон, ви можете уповільнити завантаження сторінки.

Припустимо, у проекті джанго шлях до вашого фавікону:

myapp/static/icons/favicon.png

у шаблонах джанго (бажано в базовому шаблоні) додайте цей рядок до заголовка сторінки:

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

Примітка :

Ми припускаємо, що статичні налаштування добре налаштовані в settings.py.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.