使用Django提供favicon.ico图标。为什么在使用django.views.generic.simple.redirect_to的情况下,只有在开发环境中设置settings.MEDIA_URL才能工作?

24

我发现了一种在 Django 中提供 favicon.ico 的解决方案。

(r'^favicon\.ico$',
  'django.views.generic.simple.redirect_to',
  {'url': settings.MEDIA_URL+'images/favicon.ico'}),

我不明白为什么它只在开发服务器上工作。 访问 /favicon.ico 在开发环境下能够正常工作,但是如果debug=false却不能正常工作。 如果您直接访问它,则应该重定向到由Apache服务的 /media/images/favicon.ico,这可以正常工作。

有任何想法吗?


当MEDIA_URL无法工作时,它设置为什么? - meder omuraliev
3个回答

51

我建议如果不是绝对必要,不要使用Django来提供站点图标。相反,可以在Web服务器配置文件中添加一个别名指向站点图标。

例如,在Apache中:

Alias /favicon.ico /path/to/media_url/images/favicon.ico

同意。我刚刚去我的共享主机,放了一个lighttpd的例外,让它能够工作(我原以为是apache在提供服务)。 - Clash

29

这并不是对你问题的直接回答,但你可以用它来制作网站图标:

<link rel="shortcut icon" href="{{ STATIC_URL }}img/favicon.ico" />

2
这适用于网站,但有时浏览器和工具会尝试直接访问 /favicon.ico。 - Dustin

16

redirect_to在Django 1.5中已被弃用。您可以使用基于类的RedirectView。

from django.conf import settings
from django.views.generic import RedirectView

urlpatterns = patterns('',
    (r'^favicon\.ico$', RedirectView.as_view(url=settings.MEDIA_URL + 'images/favicon.ico'))
)

对我来说,在Firefox中它可以工作,但在Chrome中不行。可能是什么原因呢?当然我已经清除了缓存。 - andilabs
1
@andi 一些软件会在域名根目录下寻找 favicon.ico,有些则遵循 <link rel="shortcut icon" href="..."> HTML 标签,还有一些软件则会在其他地方查找。这个网站可以帮助你检查你的 favicon 是否适用于大多数软件:http://realfavicongenerator.net/favicon_checker - Flimm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接