网站标题前的小logo

原因:每个浏览器访问服务器的时候会自动发送一个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/

posted @ 2019-01-06 12:21  Gnbp  阅读(468)  评论(0编辑  收藏  举报