如何在我的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.ico使用HTML。
冻结

Answers:


168

如果您有一个基本模板或标头模板,该模板或标头模板随处可见,为什么不在基本HTML中包含该图标呢?

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

听起来是一个好主意。您能否指向我说明如何执行此操作的链接?
jononomo 2014年

3
是的 像这样的东西:{{STATIC_URL}}favicon.ico
karthikr 2014年

16
这只是一个例子。对其进行修改以满足您的需求。
hanleyhansen 2014年

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。例如,这是一个JSON API。但仍希望使用可浏览的API,而不会在日志中看到404错误(chrome等会尝试自动请求favicon.ico)。在生产中使用这样的RedirectView没有任何危害。
wim

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

您可以在Wikipedia的本文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 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%}之后复制该模板,因为您必须先加载静态变量。

<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中进行了很好的配置。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.