Пирамида: Пользовательская страница 404 возвращается как «200 OK»

У меня есть настраиваемый вид 404, определенный в моем приложении Pyramid:

@view_config(context=HTTPNotFound, renderer='404.pt') def not_found(self, request): return {} 

Он отлично работает, за исключением того, что код состояния HTTP, отправленный с контентом, 200 OK, что не совсем нормально. У меня такая же проблема с 403 Forbidden. Как я могу заставить Pyramid отправить правильный код статуса?

4 Solutions collect form web for “Пирамида: Пользовательская страница 404 возвращается как «200 OK»”

Представление исключения представляет собой отдельное представление, которое предоставляет вам возможность делать все, что вы хотите. Как и любое представление, использующее средство визуализации, вы можете повлиять на объект ответа через request.response чтобы изменить его поведение. Затем рендеринг заполняет тело.

 @view_config(context=HTTPNotFound, renderer='404.pt') def not_found(self, request): request.response.status = 404 return {} 

На самом деле, в пирамиде 1.3. Появился новый декоратор @notfound_view_config.

 @notfound_view_config(renderer = '404_error.jinja2') def notfound(request): request.response.status = 404 

Лучший способ сделать это – переопределить по умолчанию Not Found View:

http://docs.pylonsproject.org/projects/pyramid/en/1.3-branch/narr/hooks.html#changing-the-not-found-view

Даже в этом случае вам нужно вернуть правильный объект ответа, который имеет статус 404:

 def notfound(request): return Response('Not Found, dude', status='404 Not Found') 

Чтобы привести пример со страницы, указанной выше

Вот как вы можете напрямую использовать крюк 404 и отображать шаблон при этом.

В init .py:

 config.add_notfound_view(not_found) 

На вашем view.py:

 from pyramid.view import notfound_view_config from pyramid.renderers import render_to_response def not_found(request): request.response.status = 404 t = 'talk_python_to_me_com:templates/errors/404.pt' return render_to_response(t, {}, request) 

Я сделал это для Talk Python To Me: http://www.talkpythontome.com/ , вот недействительная страница, чтобы увидеть настраиваемый шаблон.

http://www.talkpythontome.com/there_is_no_cat

  • Как применять подпись метода для дочерних классов?
  • Как получить фактический запрос на пирамиду при модульном тестировании
  • Unicode Hell in Pyramid: MySQL -> SQLAlchemy -> Pyramid -> JSON
  • Выполнять произвольный код python удаленно - это можно сделать?
  • Фиксирование кода для создания треугольника
  • Ошибка колкости: werkzeug.routing.BuildError
  • Загрузите файл на сервер флипсы python с помощью curl
  • Невозможно включить режим отладки в Flask
  • Python - лучший язык программирования в мире.