Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 11, 2009 12:51:35

misha111
От:
Зарегистрирован: 2009-11-12
Сообщения: 38
Репутация: +  0  -
Профиль   Отправить e-mail  

Как заменить стандартный обработчик ошибок в ZOPE 3

Здравствуйте, кто нибудь сталкивался с решением такой проблемы, когда
стандарный вилет в админку с надписью что “мол такой урл не бывает” -
не подходит?
Хорошо бы приткнуть де нибудь .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
То может его можно как то подменить своим, для всей среды а не для отдельного проекта



Офлайн

#2 Дек. 11, 2009 14:48:23

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Как заменить стандартный обработчик ошибок в ZOPE 3

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



Отредактировано (Дек. 11, 2009 14:50:30)

Офлайн

#3 Дек. 14, 2009 10:12:29

misha111
От:
Зарегистрирован: 2009-11-12
Сообщения: 38
Репутация: +  0  -
Профиль   Отправить e-mail  

Как заменить стандартный обработчик ошибок в ZOPE 3

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” />
не работает



Офлайн

#4 Дек. 14, 2009 10:23:07

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Как заменить стандартный обработчик ошибок в ZOPE 3

misha111
не работает
Можете поподробнее описать, как у вас устроена работа со скинами, если у вас есть layer, в котором вы собственно работаете, то в директиве также необходимо указать этот layer.



Офлайн

#5 Дек. 14, 2009 10:28:52

misha111
От:
Зарегистрирован: 2009-11-12
Сообщения: 38
Репутация: +  0  -
Профиль   Отправить e-mail  

Как заменить стандартный обработчик ошибок в ZOPE 3

да я и со скинами попробовал. Может я правда не правильно записываю.
деректив 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”

/>
в описании этот интерфейс пустой.
но чот наверно не так надо, может описать этот слой нужно как то по другому?



Отредактировано (Дек. 14, 2009 10:29:26)

Офлайн

#6 Дек. 14, 2009 10:57:52

astoon
От:
Зарегистрирован: 2007-04-09
Сообщения: 335
Репутация: +  2  -
Профиль   Отправить e-mail  

Как заменить стандартный обработчик ошибок в ZOPE 3

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 используется для обозначения контекста.



Офлайн

#7 Дек. 14, 2009 12:05:08

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Как заменить стандартный обработчик ошибок в ZOPE 3

astoon
ожно подглядеть в книге Филлипа
Не можно, а обязательно НУЖНО. misha111, судя по предыдущему посту, вы не понимаете что это такое, изучите эту тему (кроме книги можете еще посмотреть здесь.
astoon
for атрибут директивы browser:page используется для обозначения контекста.
Да, по сути вид это мультиадаптер, и в параметре for вы указываете, какие именно объекты будут адаптированы. Если вы там укажете interface.Interface, то данный вид будет доступен абсолютно для всех объектов, так как все интерфейсы от него наследуются.



Офлайн

#8 Дек. 14, 2009 13:09:38

misha111
От:
Зарегистрирован: 2009-11-12
Сообщения: 38
Репутация: +  0  -
Профиль   Отправить e-mail  

Как заменить стандартный обработчик ошибок в ZOPE 3

regall
Не можно, а обязательно НУЖНО. misha111, судя по предыдущему посту, вы не понимаете что это такое,
та да, дали решать такую проблему, а получается что это не так просто как представлялось поначалу.
Не остаётся выбора как вчитываться.



Офлайн

#9 Дек. 14, 2009 13:25:35

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Как заменить стандартный обработчик ошибок в ZOPE 3

misha111
а получается что это не так просто как представлялось поначалу
Тяжело в учении - легко в бою… На самом деле все очень просто, достаточно только понять, как все работает.



Офлайн

#10 Дек. 14, 2009 14:51:41

astoon
От:
Зарегистрирован: 2007-04-09
Сообщения: 335
Репутация: +  2  -
Профиль   Отправить e-mail  

Как заменить стандартный обработчик ошибок в ZOPE 3

misha111, как уже видишь, Zope3 так просто, с нахрапа не дается. Но слава богу, документации и туториалов - завались. После же изучения достаточно быстро приходит понимание, что этот фреймворк вообще ни в чем не ограничивает. С ним не нужно “бороться”. Что меня и привлекло изначально когда-то.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version