原因:每个浏览器访问服务器的时候会自动发送一个GET 请求,地址是:/favicon.ico
如果不处理,则只会在浏览器标题前添加一个文本类的图标
前提:有现有的图标favicon.ico,且按开发规范存放在'static/img/下
解决
Flask 框架:
添加一条为/favicon.ico的规则,返回current_app的send_static_file方法,参数为logo的在static下的路径,如:
@index_blu.route('/favicon.ico')
def get_web_logo():
return current_app.send_static_file('img/favicon.ico')
Django 框架:
需要在STATIC_URL 配置下添加一个配置参数
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
]
方法一:(使用重定向,会让浏览器产生一个新的请求)(已测)
在urls.py 添加规则:
from django.conf.urls import url
from django.views.generic.base import RedirectView
urlpatterns = [
...,
url(r'favicon.ico', RedirectView.as_view(url='static/img/favicon.ico')),
]
方法二:(指定图标地址,告诉浏览器,网站logo的正确地址,需要在模板种的头部指定)(待测)
{% load staticfiles %}
<head lang="zh">
<meta charset="UTF-8">
<link rel="shortcut icon" href="{%static " rel="external nofollow" img/favicon.ico" %}" /> <!-- 添加这行 -->
<title></title>
</head>
方法三:(最优雅的方式,Django 有自己的静态文件的处理方法,那就是可以设置url规则,返回某个静态文件的)(已测)
from django.conf.urls import url
from django.contrib.staticfiles.views import serve
urlpatterns = [
...,
url(r'favicon.ico', serve, {'path': 'img/favicon.ico'}),
]
参考资料
如何优雅处理 Django 中的 favicon.ico 图标:https://www.hongweipeng.com/index.php/archives/1538/