如何在我的django应用程序中显示一个favicon?

jon*_*omo 128 django favicon

我只想删除favicon.ico我的staticfiles目录,然后让它出现在我的应用程序中.

我怎么能做到这一点?

我已将favicon.ico文件放在我的staticfiles目录中,但它没有显示,我在日志中看到了这个:

127.0.0.1 - - [21/Feb/2014 10:10:53] "GET /favicon.ico HTTP/1.1" 404 -
Run Code Online (Sandbox Code Playgroud)

如果我去http://localhost:8000/static/favicon.ico,我可以看到图标.

han*_*sen 148

如果您有一个基本或标题模板,包含在哪里,为什么不在那里包含基本HTML的图标?

<link rel="shortcut icon" type="image/png" href="{% static 'favicon.ico' %}"/>
Run Code Online (Sandbox Code Playgroud)

  • 这只是一个例子.修改它以满足您的需求. (16认同)
  • MIME类型(`image/png`)和文件格式(`favicon.ico`)不匹配. (4认同)
  • 听起来是一个好主意。你能给我指出一个解释如何做到这一点的链接吗? (3认同)
  • 是啊.类似于:`{{STATIC_URL}} favicon.ico` (3认同)
  • 这个答案对我不起作用,但其他使用`href ="{%static'timicon.ico'%}`的答案. (3认同)
  • 我的图标不是 .png 文件。 (2认同)

wim*_*wim 106

一个轻量级的技巧是在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),
    ...
]
Run Code Online (Sandbox Code Playgroud)

当你没有真正拥有其他静态内容来托管时,这很适合让favicons工作.

  • @ x-yuri另一个答案更简单,*如果你有一个基本模板*.关键是您可能没有任何模板或静态内容,因此甚至可能无法配置STATIC_URL.例如,它是一个json API.但仍然需要一个可浏览的API,而不会在日志中看到404错误(chrome等会尝试自动请求favicon.ico).在生产中使用这样的RedirectView没有坏处. (12认同)
  • 与向模板添加两行相比,我看不出这是轻量级的。这是一种我不会在生产中使用的技巧。 (3认同)

Kin*_*eon 53

在模板文件中

{% load static %}
Run Code Online (Sandbox Code Playgroud)

然后在<head>标签内

<link rel="shortcut icon" href="{%  static 'favicon.ico' %}">
Run Code Online (Sandbox Code Playgroud)

这假设您在settings.py中适当地配置了静态文件


ePi*_*314 29

通用解决方案

你可以像在任何其他框架中那样在Django中显示favicon:只使用纯HTML.

将以下代码添加到HTML模板的标头中.
如果您的应用程序中的favicon是相同的,那么对您的基本HTML模板更好.

<link rel="shortcut icon" href="{% static 'favicon/favicon.png' %}"/>
Run Code Online (Sandbox Code Playgroud)

以前的代码假定:

  1. 您的静态文件夹中有一个名为"favicon"的文件夹
  2. favicon文件的名称为"favicon.png"
  3. 您已正确设置设置变量STATIC_URL

您可以在维基百科的这篇文章https://en.wikipedia.org/wiki/Favicon中找到有关文件格式支持以及如何使用favicon的有用信息. 我建议使用通用浏览器兼容性.
.png

编辑:
在一条评论中发布,
"不要忘记{% load staticfiles %}在模板文件的顶部添加!"


Mus*_*cim 27

在您settings.py添加一个根静态文件目录:

   STATICFILES_DIRS = [
        os.path.join(BASE_DIR, 'static')
        ]
Run Code Online (Sandbox Code Playgroud)

创建 /static/images/favicon.ico

将网站图标添加到您的模板(base.html):

{% load static %}
<link rel="shortcut icon" type="image/png" href="{% static 'images/favicon.ico' %}"/>
Run Code Online (Sandbox Code Playgroud)

并创建一个 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')))
]
Run Code Online (Sandbox Code Playgroud)


tin*_*are 12

第一的

\n

将您的 favicon.ico 上传到您的应用静态路径\xef\xbc\x8c 或您在 settings.py 中通过 STATICFILES_DIRS 配置的路径

\n

第二

\n

在应用程序基本模板文件中:

\n
{% load static %}\n<link rel="shortcut icon" type="image/png" href="{% static 'favicon.ico' %}"/>\n
Run Code Online (Sandbox Code Playgroud)\n

您可以在此处让应用程序使用不同的 favicon.ico 文件。

\n

添加

\n

在项目/urls.py

\n
from django.templatetags.static import static # Not from django.conf.urls.static \nfrom django.views.generic.base import RedirectView\n
Run Code Online (Sandbox Code Playgroud)\n

将此路径添加到您的 urlpatterns 基本位置

\n
path('favicon.ico', RedirectView.as_view(url=static('favicon.ico'))),\n
Run Code Online (Sandbox Code Playgroud)\n

这可以让已安装的应用程序(例如管理应用程序,您不应该更改模板)和您忘记修改模板的应用程序,还显示默认的 favicon.ico

\n


A.R*_*ouf 9

<link rel="shortcut icon" href="{% static 'favicon/favicon.ico' %}"/>
Run Code Online (Sandbox Code Playgroud)

只需在你的基本文件中添加它,如第一个答案,但ico扩展名,并将其添加到静态文件夹


Sau*_*tel 6

如果你有许可的话

Alias /favicon.ico /var/www/aktel/workspace1/PyBot/PyBot/static/favicon.ico
Run Code Online (Sandbox Code Playgroud)

为您的虚拟主机添加别名。(在 apache 配置文件中)对于 robots.txt 类似

Alias /robots.txt /var/www/---your path ---/PyBot/robots.txt
Run Code Online (Sandbox Code Playgroud)


小智 6

我在 django 2.1.1 中尝试了以下设置

基本.html

<head>
  {% load static %}
  <link rel="shortcut icon" type="image/png" href="{% static 'images/favicon.ico' %}"/>
</head>
Run Code Online (Sandbox Code Playgroud)

设置.py

 STATIC_ROOT = os.path.join(BASE_DIR, 'static')
 STATIC_URL = '/static/'` <br>`.............
Run Code Online (Sandbox Code Playgroud)

项目目录结构

图像

在这里查看直播


san*_*aji 5

        <link rel="shortcut icon" type="image/png" href="{% static 'favicon/sample.png' %}" />
Run Code Online (Sandbox Code Playgroud)

同时运行:python manage.py collectstatic