Страшная сказка про IPython
Обновил недавно python-xy. В его состав входит новый IPython второй версии. Запускаю веб-блокнот, стилей нет, неюзабельно. Смотрю в Developer Tools > Network. Стили присылаются, но Content-Type у них text/plain. Несмотря на rel="stylesheet" и type="text/css" у тэга link, браузер в такое не верит и признавать стили отказывается.
Сервер стартует на 8888 порту, по этой строке и начинаем поиски.
Находим один файл C:\Python27\Lib\site-packages\IPython\ht ml\notebookapp.py. Этот порт слушает экземпляр httpserver.HTTPServer, первый аргумент конструктора которого обработчик запросов, экземпляр NotebookWebApplication. У этого класса в init_settings прописано static_handler_class = FileFindHandler, который, видимо, и обрабатывает запросы к статике. Идем в его скромное жилище в \html\base\handlers.py. Обнаруживаем, что сам он никаким криминалом не занимается, поручая это родителю tornado.web.StaticFileHandler. Тот выставляет заголовки в set_headers, используя для этого метод get_content_type. В нем написано:
Библиотека mimetypes — стандартная библиотека питона. Становится душновато. Открываем IPython Qt Console, вбиваем
Этот кусок кода радостно выдает ('text/plain', None).
Лезем в C:\Python27\Lib\mimetypes.py и наблюдаем 600 строк, причем в функции _default_mime_types словарь types_map содержит '.css': 'text/css'. В попытках выяснить, откуда все же берется странный text/plain находим всякие чтения файлов и add_type. Можно было дотрейсить честно, но мне повезло и я увидел метод MimeTypes.read_windows_registry. Он проверяет в реестре значения вида HKCR\.css\Content Type и меняет свою базу на прочитанное. Теряюсь в догадках, какая гениальная программа оставила там у меня text/plain, но у этого парня, похоже, вылезла та же проблема. Исправляем реестр, все работает.
Другие страшные сказки читайте здесь: Как завести игрушку?, Чиним ljArchive, Графический дебаг, История одного Tray Balloon, MFC и майонез.
Сервер стартует на 8888 порту, по этой строке и начинаем поиски.
Находим один файл C:\Python27\Lib\site-packages\IPython\ht
mime_type, encoding = mimetypes.guess_type(self.absolute_path)Библиотека mimetypes — стандартная библиотека питона. Становится душновато. Открываем IPython Qt Console, вбиваем
import mimetypes
mimetypes.guess_type('file.css')Этот кусок кода радостно выдает ('text/plain', None).
Лезем в C:\Python27\Lib\mimetypes.py и наблюдаем 600 строк, причем в функции _default_mime_types словарь types_map содержит '.css': 'text/css'. В попытках выяснить, откуда все же берется странный text/plain находим всякие чтения файлов и add_type. Можно было дотрейсить честно, но мне повезло и я увидел метод MimeTypes.read_windows_registry. Он проверяет в реестре значения вида HKCR\.css\Content Type и меняет свою базу на прочитанное. Теряюсь в догадках, какая гениальная программа оставила там у меня text/plain, но у этого парня, похоже, вылезла та же проблема. Исправляем реестр, все работает.
Другие страшные сказки читайте здесь: Как завести игрушку?, Чиним ljArchive, Графический дебаг, История одного Tray Balloon, MFC и майонез.