1. 程式人生 > >網站標題前的小logo

網站標題前的小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/