Как я могу получить значок в моем приложении django?

161

Я просто хочу поместить его 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, я увижу значок.

jononomo
источник
5
Ошибка GET /favicon.icoне в GET /static/favicon.icoпоиске http://localhost:8000/static/favicon.icoне связана. Похоже, что некоторые браузеры запрашивают /favicon.icoпомимо HTML.
замерзло

Ответы:

180

Если у вас есть базовый шаблон или шаблон заголовка, который включен повсюду, почему бы не включить туда значок с базовым HTML?

<link rel="shortcut icon" type="image/png" href="{% static 'favicon.ico' %}"/>
Hanleyhansen
источник
3
Звучит как хорошая идея. Можете ли вы указать мне ссылку, которая объясняет, как это сделать?
jononomo
3
Да уж. Что-то вроде:{{STATIC_URL}}favicon.ico
karthikr
17
Это просто пример. Измените его под свои нужды.
hanleyhansen
3
Этот ответ не сработал для меня, но другие использованные ответы работали href="{% static 'favicon.ico' %}.
Bezewy
5
Тип MIME ( image/png) и формат файла ( favicon.ico) не совпадают.
x-yuri
130

Один легкий трюк - сделать перенаправление в вашем 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
18
@ x-yuri Другой ответ проще, если у вас вообще есть базовый шаблон . Дело в том, что у вас может не быть шаблона или статического содержимого, поэтому STATIC_URL может даже не быть настроен. например, это json API. но все же вам нужен доступный для просмотра API, не видя ошибок 404 в ваших журналах (Chrome и т. д. попытаются запросить favicon.ico автоматически). Нет никакого вреда в использовании такого RedirectView в производстве.
wim
Не url='/static/favicon.ico'должны строиться динамически, вроде как url=settings.STATIC_URL + 'favicon.ico'? Если я правильно понимаю, предлагаемое решение будет работать только по назначению, когда у нас есть файл settings.py STATIC_URL='/static/.
Рабарберски,
57

В файле шаблона

{% 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.png.
  3. Вы правильно установили переменную настройки STATIC_URL

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

РЕДАКТИРОВАТЬ:
Как написано в одном комментарии,
«Не забудьте добавить {% load staticfiles %}в начало файла шаблона!»

ePi272314
источник
Совет: favicon.ico не помог мне, после тестирования с расширением .png все заработало!
kaya
Ты права @kaya. Формат .ico не самый лучший с точки зрения совместимости. Однако .png всегда работает.
ePi272314 04
19

В вашем 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' %}"/>

Просто добавьте это в базовый файл ur, как первый ответ, но с расширением 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 manage.py collectstatic

Санка Нанаджи
источник
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 (например: ядро) / static / mainapp (например: ядро) / img

Затем перейдите к шаблону mainapp (например, base.html) и просто скопируйте его после {% load static%}, потому что вы должны сначала загрузить статику.

<link href="{% static 'core/img/favi_x.png' %}" rel="shortcut icon" type="image/png" />
Карлос Х. Олива Домингес
источник
0

Лучшие практики :

Вопреки тому, что вы думаете, значок может быть любого размера и любого типа изображения. Перейдите по этой ссылке для получения подробной информации.

Отсутствие ссылки на ваш значок может замедлить загрузку страницы.

Предположим, что в проекте django путь к вашему значку:

myapp/static/icons/favicon.png

в ваших шаблонах django (желательно в базовом шаблоне) добавьте эту строку в заголовок страницы:

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

Заметка :

Мы полагаем, что статические настройки хорошо настроены в settings.py.

Алуани Юнес
источник
0

Наткнулся на это в поисках помощи. Я пытался реализовать значок в моем проекте Django, но он не отображался - хотел добавить к разговору.

Пытаясь реализовать значок в моем проекте Django, я переименовал файл «favicon.ico» в «my_filename.ico» - изображение не отображалось. После переименования в «favicon.ico» проблема была решена, и отображалась графика. ниже приведен код, решивший мою проблему:

<link rel="shortcut icon" type="image/png" href="{% static 'img/favicon.ico' %}" />
Тео Герман
источник