尽管这是一个老问题,但我仍然有问题。我喜欢从当前解决方案中的列表生成 URL 的方式,但我不相信这是最好的。
不过,经过一番研究,我发现realfavicongenerator.net是一个非常有用的资源,它为您生成所有必需的 favicons 文件,并且我的一位同事向我发送了这篇文章,该文章似乎支持所提出的解决方案,并带有更新的 Django 版本。
基于以上所有,我的解决方案是使用原生站点地图框架、用于 robots.txt 的django-robots和 ROOT_ASSETS 字典,文件前缀作为键,值作为文件列表,例如:
ROOT_ASSETS = {
"images/favicons/": [
"apple-touch-icon-114x114.png",
"apple-touch-icon-120x120.png",
"apple-touch-icon-144x144.png",
"apple-touch-icon-152x152.png",
"apple-touch-icon-180x180.png",
"apple-touch-icon-57x57.png",
"apple-touch-icon-60x60.png",
"apple-touch-icon-72x72.png",
"apple-touch-icon-76x76.png",
"apple-touch-icon-precomposed.png",
"favicon.ico",
]
}
然后我生成我的网址:
from django.conf.urls import patterns, url, include
from django.contrib.staticfiles.storage import staticfiles_storage
root_assets_urls = []
for prefix, files in ROOT_ASSETS.iteritems():
for f in files:
asset_url = staticfiles_storage.url("{prefix}{file}".format(prefix=prefix, file=f))
root_assets_urls.append(
url(r'^{0}$'.format(f), RedirectView.as_view(url=asset_url))
)
root_assets = patterns('', *root_assets_urls)
urlpatterns = patterns(
'',
url(r'^', include(root_assets)),
[...]
)
我还在我的主模板的头部包含了由realfavicongenerator.net生成的 HTML。