2015-02-02 2 views
0

вопроса here и here не помогает :(питон-смерч DonT матча «/favicon.ico»

Я пытаюсь обработчик «/favicon.ico», но он не работает, как expected.It-х проводной ...

Мой обработчик выглядит следующим образом:

handlers = [ 
    (r'^/$', RootHandler), # this works fine 
    (r'^/favicon\.ico$', IconHandler), 
    # other handlers 
] 

Мои IconHandler выглядит следующим образом:

class IconHandler(tornado.web.RequestHandler): 
    def get(self): 
     self.set_header("Content-Type", "image/vnd.microsoft.icon") 
     with open(icon_path, 'rb') as f: 
      self.write(f.read()) 
     return self.flush() 

http://127.0.0.1:8000/favicon.ico Но дает мне ошибку 404:

Traceback (most recent call last): 
    File "/home/tyler/.pyenv/versions/3.4.2/lib/python3.4/site-packages/tornado/web.py", line 1334, in _execute 
    result = yield result 
    File "/home/tyler/.pyenv/versions/3.4.2/lib/python3.4/site-packages/tornado/gen.py", line 628, in run 
    value = future.result() 
    File "/home/tyler/.pyenv/versions/3.4.2/lib/python3.4/site-packages/tornado/concurrent.py", line 109, in result 
    raise_exc_info(self._exc_info) 
    File "<string>", line 3, in raise_exc_info 
    File "/home/tyler/.pyenv/versions/3.4.2/lib/python3.4/site-packages/tornado/gen.py", line 175, in wrapper 
    yielded = next(result) 
    File "/home/tyler/.pyenv/versions/3.4.2/lib/python3.4/site-packages/tornado/web.py", line 2110, in get 
    self.root, absolute_path) 
    File "/home/tyler/.pyenv/versions/3.4.2/lib/python3.4/site-packages/tornado/web.py", line 2286, in validate_absolute_path 
    raise HTTPError(404) 
tornado.web.HTTPError: HTTP 404: Not Found 

Так что я изменил шаблон соответствия URL и сделал несколько тестов:

handler pattern  | url         | status 
-----------------------|---------------------------------------|-------- 
r'^/favicon\.ico$'  | http://127.0.0.1:8000/favicon.ico  | 404Error 
r'/favicon\.ico'  | http://127.0.0.1:8000/favicon.ico  | 404Error 
r'/favicon.ico'  | http://127.0.0.1:8000/favicon.ico  | 404Error 
r'^/sub/favicon\.ico$' | http://127.0.0.1:8000/sub/favicon.ico | Works! 
r'/sub/favicon\.ico' | http://127.0.0.1:8000/sub/favicon.ico | Works! 
r'/sub/favicon.ico' | http://127.0.0.1:8000/sub/favicon.ico | Works! 

ПОМОГИТЕ. Я не могу понять :(

питон: 3.4.2

смерч: 4.0.2

Ubuntu:. 14,10

ответ

2

Я считаю, что у вас есть static_path поле в настройках приложения А что происходит в ваш случай это:

You can serve static files by sending the static_path setting as a keyword argument.

И:

note that a StaticFileHandler can be installed automatically with the static_path setting

Favicon pattern автоматически вставлен в список шаблонов обработчиков, если у вас есть настройка static_path. И эти автоматические статические шаблоны имеют более высокий приоритет, чем все ваши собственные шаблоны.

Это ваш отслеживающий является доказательством:

File "/home/tyler/.pyenv/versions/3.4.2/lib/python3.4/site-packages/tornado/web.py", line 2286, in validate_absolute_path 
    raise HTTPError(404) 

Итак, я предлагаю вам удалить static_path от ваших настроек приложения, а также добавить свой собственный /static рисунок как этот

(r"/static/(.*)", web.StaticFileHandler, {"path": my_path}), 
+0

YEAH, который работает !. И еще один способ - поместить «favicon.ico» непосредственно под «static_path», тогда торнадо автоматически обработает его. Ты спас мой день :) –

Смежные вопросы