可靠,优雅地处理所有网站一次性root静态文件,如favicon.ico?

时间:2012-09-16 13:37:42

标签: ios django heroku web gunicorn

也许我错过了一些东西(我希望我是这样!),但似乎非常笨拙地要处理浏览器请求的一次性root网站文件,例如favicon.ico和apple-之类的东西touch-icon-precomposed.png(在iPad上)。现在,每当遇到其中一个我没有明确提供文件时,我就会收到500服务器错误。

我的问题:

  1. 我的网络应该处理的所有主流浏览器是否都有最新的所有此类文件列表?

  2. 作为一个故障保护,有没有办法让这些文件中的任何一个无声地失败,即没有得到500服务器错误,webapp继续以其快乐的方式,只需使用空白的图标或其他什么?

  3. 我在Heroku上用gunicorn运行一个Django应用程序。

1 个答案:

答案 0 :(得分:1)

我从来没有从无效网址中得到500错误,因为我使用STATIC_URL和基于类的RedirectView

通常我有一个专门用于此的应用程序,并将其包含在根urls.py中

#urls.py
include('oneoff.urls', name='oneoff')`

#oneoff/urls.py
urlpatterns = ( '',
    url(r'favicon.ico$',
        RedirectView.as_view(url=urlparse.urljoin(settings.STATIC_URL, "img/favicon.ico")),
        name="favicon"
    ),
    url(r'icon-precomposed.png',
        RedirectView.as_view(url=urlparse.urljoin(settings.STATIC_URL, "img/iphone/icon.png")),
        name="iphone"
    ),
)

然后在模板中

{% load url from future %}
<link rel="favicon" href="{% url 'oneoff:favicon' %} />