Найти - Пользователи
Полная версия: Как заменить стандартный обработчик ошибок в ZOPE 3
Начало » Zope/Plone/Bluebream » Как заменить стандартный обработчик ошибок в ZOPE 3
1 2
misha111
Здравствуйте, кто нибудь сталкивался с решением такой проблемы, когда
стандарный вилет в админку с надписью что “мол такой урл не бывает” -
не подходит?
Хорошо бы приткнуть де нибудь .htaccess, но они вроде б только для
апача, а http серевре вроде б какой то внутренний.
Или может где то можно описать скрипт обработчика - тоже отлично было
бы.
Я так понимаю, чт если есть стандартній обработчик для всего сервера, который выдаёт

The page that you are trying to access is not available

Please note the following:

1. You might have misspelled the url
2. You might be trying to access a non-existing page
То может его можно как то подменить своим, для всей среды а не для отдельного проекта
regall
1. Перенесите вопрос в соответствующий разде.
2. в Zope 3 ошибка 404 все-равно по-прежнему завязана на компонентную архитектуру: ексцепшн NotFound c интерфейсом INotFound. Все, что вам нужно - написать свой вид и зарегистрировать его в zcml:
<page 
...
for = "zope.exception.interfaces.INotFound"
...
/>
P.S. Код писал по памяти, так что неуверен, что написал правильный путь к INotFound.
Также такое можно делать для каждой ошибки, только нужно взять соответствующий интерфейс.

UPDATE
Кстати, в Zope 3 wiki FAQ это описано: http://wiki.zope.org/zope3/FAQProgramming#how-do-i-write-a-custom-404-error-page
misha111
regall
1. Перенесите вопрос в соответствующий разде.
2. в Zope 3 ошибка 404 все-равно по-прежнему завязана на компонентную архитектуру: ексцепшн NotFound c интерфейсом INotFound. Все, что вам нужно - написать свой вид и зарегистрировать его в zcml:
<page 
...
for = "zope.exception.interfaces.INotFound"
...
/>
P.S. Код писал по памяти, так что неуверен, что написал правильный путь к INotFound.
Также такое можно делать для каждой ошибки, только нужно взять соответствующий интерфейс.

UPDATE
Кстати, в Zope 3 wiki FAQ это описано: http://wiki.zope.org/zope3/FAQProgramming#how-do-i-write-a-custom-404-error-page
я попробовал в разных модификациях
<browser:page
for=“zope.publisher.interfaces.INotFound”
name=“notfound.html”
class=“.class1”
permission=“zope.Public”
template=“notfound.pt” />
не работает
regall
misha111
не работает
Можете поподробнее описать, как у вас устроена работа со скинами, если у вас есть layer, в котором вы собственно работаете, то в директиве также необходимо указать этот layer.
misha111
да я и со скинами попробовал. Может я правда не правильно записываю.
деректив layer в объявлениях страниц нет, а здесь я попробовал написать
<browser:page
for=“zope.publisher.interfaces.INotFound”
name=“notfound.html”
class=“.Page_main.PageMainImpl”
permission=“zope.Public”
layer=“.Page_main.IPageMain”
template=“notfound.pt”
/>
вообще этот IPageMain везде используется вот так
<browser:page
for=“.Page_main.IPageMain”

/>
в описании этот интерфейс пустой.
но чот наверно не так надо, может описать этот слой нужно как то по другому?
astoon
misha111
да я и со скинами попробовал. Может я правда не правильно записываю.
деректив layer в объявлениях страниц нет, а здесь я попробовал написать
<browser:page
for=“zope.publisher.interfaces.INotFound”
name=“notfound.html”
class=“.Page_main.PageMainImpl”
permission=“zope.Public”
layer=“.Page_main.IPageMain”
template=“notfound.pt”
/>
?
Я ведь в рассылке отвечал Вам же, посмотрите внимательнее. Почему name=“notfound.html”? Это имя (динамически генерируемого адаптера вида с подмешиванием указанного mix-in'а “.Page_main.PageMainImpl”) назначено дефолтным именем для траверса на контексте “INotFound” и запроса “IPageMain” ?
Если оно не назначено дефолтным (удобный способ сделать это - директива defaultView), то дефолтное имя обычно index.html (скорее всего, этот факт тоже назначен где-то в недрах пакетов zope той же самой директивой, вероятно для наиболее общего контекста zope.interface.Interface. Но где точно - я не смотрел.).

Кроме того, судя по названию (“.Page_main.IPageMain”) это никакой не layer там. Что такое layer и skin можно подглядеть в книге Филлипа, кстати.
misha111
вообще этот IPageMain везде используется вот так
    <browser:page
        for=“.Page_main.IPageMain”

/>
в корне не верно.
for атрибут директивы browser:page используется для обозначения контекста.
regall
astoon
ожно подглядеть в книге Филлипа
Не можно, а обязательно НУЖНО. misha111, судя по предыдущему посту, вы не понимаете что это такое, изучите эту тему (кроме книги можете еще посмотреть здесь.
astoon
for атрибут директивы browser:page используется для обозначения контекста.
Да, по сути вид это мультиадаптер, и в параметре for вы указываете, какие именно объекты будут адаптированы. Если вы там укажете interface.Interface, то данный вид будет доступен абсолютно для всех объектов, так как все интерфейсы от него наследуются.
misha111
regall
Не можно, а обязательно НУЖНО. misha111, судя по предыдущему посту, вы не понимаете что это такое,
та да, дали решать такую проблему, а получается что это не так просто как представлялось поначалу.
Не остаётся выбора как вчитываться.
regall
misha111
а получается что это не так просто как представлялось поначалу
Тяжело в учении - легко в бою… На самом деле все очень просто, достаточно только понять, как все работает.
astoon
misha111, как уже видишь, Zope3 так просто, с нахрапа не дается. Но слава богу, документации и туториалов - завались. После же изучения достаточно быстро приходит понимание, что этот фреймворк вообще ни в чем не ограничивает. С ним не нужно “бороться”. Что меня и привлекло изначально когда-то.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB