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


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.icoHTMLにもかかわらず、一部のブラウザがリクエストしているよう です。
凍結

回答:


168

どこにでも含まれているベースまたはヘッダーテンプレートがある場合、ファビコンを基本的なHTMLに含めてみませんか?

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

いい考えですね。これを行う方法を説明するリンクを私に教えてもらえますか?
jononomo 2014

3
うん。例:{{STATIC_URL}}favicon.ico
karthikr 14

16
これは単なる例です。ニーズに合わせて変更してください。
hanleyhansen 14

3
この答えは私にはうまくいきませんでしたが、他の答えhref="{% static 'favicon.ico' %}はうまくいきました。
Bezewy 2015年

4
MIMEタイプ(image/png)とファイル形式(favicon.ico)が一致しません。
x-yuri 2018

122

軽量トリックの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),
    ...
]

これは、ホストする静的コンテンツが本当にない場合にファビコンを機能させる簡単な方法としてうまく機能します。


3
テンプレートに2行追加するのに比べて、これがどのように軽量であるかわかりません。これは、私がプロダクションで使用しないようなトリックです。
x-yuri 2018

16
@ x-yuriもう1つの答えは、ベーステンプレートがまったくある場合の方が簡単です。重要なのは、テンプレートまたは静的コンテンツがない可能性があるため、STATIC_URLが構成されていない可能性があることです。たとえば、json APIです。ただし、ログに404エラーを表示せずに参照可能なAPIが必要です(Chromeなどは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.png」です。
  3. 設定変数STATIC_URLが適切に設定されている

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

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


ヒント:favicon.icoは私のためにそれをしませんでした、.png拡張子でテストした後、それはうまくいきました!
カヤ2018

あなたは正しい@カヤです。.ico形式は互換性に関して最良ではありません。ただし、.pngは常に機能します。
ePi272314 2018

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

urls.pyブラウザがファビコンを探すため、URLリダイレクトを作成します/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テンプレートをオーバーライドすることです。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 %}

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(ex:core)/ static / mainapp(ex:core)/ imgにファビコンをコピーするだけです

次に、mainappテンプレート(ex:base.html)に移動し、{%load static%}の後にこれをコピーします。これは、最初にstaticsをロードする必要があるためです。

<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で適切に構成されていると考えられます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.