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
にアクセスすると、ファビコンが表示されます。
どこにでも含まれるベーステンプレートまたはヘッダーテンプレートがある場合は、基本的なHTMLにファビコンを含めないでください。
<link rel="shortcut icon" type="image/png" href="{% static 'favicon.ico' %}"/>
軽量なトリックの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),
...
]
これは、ホストに他の静的コンテンツが実際にない場合にファビコンを機能させるための簡単なトリックとしてうまく機能します。
テンプレートファイル内
{% load static %}
その後、<head>
タグ内
<link rel="shortcut icon" href="{% static 'favicon.ico' %}">
これは、settings.pyで静的ファイルが適切に構成されていることを前提としています。
注:Djangoの古いバージョンは、load staticfiles
ではなく、load static
を使用します。
Djangoに表示されるファビコンは、他のフレームワークと同じ方法で取得できます。純粋なHTMLを使用するだけです。
HTMLテンプレートのヘッダーに次のコードを追加します。
より良いのは、ファビコンがアプリケーション全体で同じである場合、ベースHTMLテンプレートです。
<link rel="shortcut icon" href="{% static 'favicon/favicon.png' %}"/>
前のコードは以下を前提としています。
ファイル形式のサポートに関する有用な情報と、Wikipediaのこの記事でファビコンを使用する方法を見つけることができます https://en.wikipedia.org/wiki/Favicon 。
普遍的なブラウザの互換性のために.png
の使用をお勧めします。
編集:
1つのコメントで投稿されたように、
「テンプレートファイルの先頭に{% load staticfiles %}
を追加することを忘れないでください!」
<link rel="shortcut icon" href="{% static 'favicon/favicon.ico' %}"/>
最初の回答のようなウルベースファイルにそれを追加しますが、ico拡張子を静的フォルダに追加します
許可があれば
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で次の設定を試しました
<head>
{% load static %}
<link rel="shortcut icon" type="image/png" href="{% static 'images/favicon.ico' %}"/>
</head>
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'` <br>`.............
最善の解決策は、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 %}
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')))
]
ベストプラクティス:
あなたが思うかもしれないことに反して、ファビコンはどんなサイズでも、どんな画像タイプでも構いません。 詳細については、このリンクに従ってください。
ファビコンへのリンクを配置しないと、ページの読み込みが遅くなる可能性があります。
Djangoプロジェクトで、ファビコンへのパスが次のとおりであると仮定します。
myapp/static/icons/favicon.png
Djangoテンプレート(できれば基本テンプレート)で、次の行をページの先頭に追加します。
<link rel="shortcut icon" href="{% static 'icons/favicon.png' %}">
注:
静的設定はsettings.pyで適切に設定されていると思われます。