web-dev-qa-db-ja.com

Djangoアプリに表示されるファビコンを取得するにはどうすればよいですか?

staticfilesディレクトリにfavicon.icoをドロップして、アプリに表示したいだけです。

どうすればこれを達成できますか?

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にアクセスすると、ファビコンが表示されます。

113
jononomo

どこにでも含まれるベーステンプレートまたはヘッダーテンプレートがある場合は、基本的なHTMLにファビコンを含めないでください。

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

軽量なトリックの1つは、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),
    ...
]

これは、ホストに他の静的コンテンツが実際にない場合にファビコンを機能させるための簡単なトリックとしてうまく機能します。

100
wim

テンプレートファイル内

{% load static %}

その後、<head>タグ内

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

これは、settings.pyで静的ファイルが適切に構成されていることを前提としています。


:Djangoの古いバージョンは、load staticfilesではなく、load staticを使用します。

51
Hareem Adderley

ユニバーサルソリューション

Djangoに表示されるファビコンは、他のフレームワークと同じ方法で取得できます。純粋なHTMLを使用するだけです。

HTMLテンプレートのヘッダーに次のコードを追加します。
より良いのは、ファビコンがアプリケーション全体で同じである場合、ベースHTMLテンプレートです。

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

前のコードは以下を前提としています。

  1. 静的フォルダーに「favicon」という名前のフォルダーがあります
  2. ファビコンファイルの名前は「favicon.png」です
  3. 設定変数STATIC_URLを適切に設定しました

ファイル形式のサポートに関する有用な情報と、Wikipediaのこの記事でファビコンを使用する方法を見つけることができます https://en.wikipedia.org/wiki/Favicon
普遍的なブラウザの互換性のために.pngの使用をお勧めします。

編集:
1つのコメントで投稿されたように、
「テンプレートファイルの先頭に{% load staticfiles %}を追加することを忘れないでください!」

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

最初の回答のようなウルベースファイルにそれを追加しますが、ico拡張子を静的フォルダに追加します

7
A.Raouf

許可があれば

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

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>`.............

プロジェクトのディレクトリ構造

Image

ここでライブ表示

2
MAK Azad

最善の解決策は、Django base.htmlテンプレートをオーバーライドすることです。 adminディレクトリの下に別の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 %}
2
Basant Kumar

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

ブラウザはurls.pyでファビコンを探すため、/favicon.icoでURLリダイレクトを作成します

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

ベストプラクティス:

あなたが思うかもしれないことに反して、ファビコンはどんなサイズでも、どんな画像タイプでも構いません。 詳細については、このリンクに従ってください。

ファビコンへのリンクを配置しないと、ページの読み込みが遅くなる可能性があります。

Djangoプロジェクトで、ファビコンへのパスが次のとおりであると仮定します。

myapp/static/icons/favicon.png

Djangoテンプレート(できれば基本テンプレート)で、次の行をページの先頭に追加します。

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

注:

静的設定はsettings.pyで適切に設定されていると思われます。

0
Alouani Younes