Различия между версиями 10 и 11
Версия 10 от 2010-07-05 13:18:39
Размер: 4950
Редактор: RostislavDzinko
Комментарий:
Версия 11 от 2010-07-05 13:43:58
Размер: 5968
Редактор: RostislavDzinko
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 40: Строка 40:
If you have created the application using the bluebream project template, you won’t get this error. Because there is already a a default view name (index) is configured in application.zcml configuration file inside the main package. Если вы создали приложение посредством шаблона проекта bluebream, у вас этой ошибки не возникнет, потому что в этом случае вид по умолчанию с именем '''index''' уже есть и настроен в конфигурационном файле '''application.zcml''' внутри главного пакета.
Строка 42: Строка 42:
If there is a default view name configured, but there is no view registered with that name, you will get NotFound error when you try to access object directly without specifying the name of view. For example, if the default view name is index and there is no such view registered for root folder, you will get an error like this: Если имя по умолчанию настроено, но вида с таким именем не существует, вы получите ошибку '''!NotFound''' при попытке получить доступ к объекту прямо без указания имени вида. Например, если вид по умолчанию - '''index''', а такой вид не зарегистрирован для корневой папки, то вы получите примерно следующую ошибку:
Строка 44: Строка 44:
{{{
Строка 46: Строка 47:
As mentioned earlier, the browser:defaultView directive is defined in zope.publisher. To use this directive, you need to include meta.zcml using include directive: }}}
Строка 48: Строка 49:
Как упоминалось ранее, директива '''browser:defaultView''' определена в ''zope.publisher''. Чтобы ее использовать, нужно включить '''meta.zcml''' директивой '''include''':

{{{#!highlight xml
Строка 49: Строка 53:
For example, you can specify the default view for IContainer like this: }}}
Строка 51: Строка 55:
Например, вы можете указать вид по молчанию для '''IContainer''' следующим образом:

{{{#!highlight xml
Строка 55: Строка 62:
If index is registered as the name for default view and the view is not explicitly mentioned in the URL, BlueBream will try to get @@index view for containers. However, you need to have a browser view registered to access the view, otherwise a NotFound error will be raised as mentioned above. }}}
Строка 57: Строка 64:
More details about registering a browser view using browser:page directive is explained in Browser Page manual. Если '''index''' зарегистрирован как имя вида по умолчанию, а вид явно не указан в URL, !BlueBream попытается получить вид '''@@index''' для контейнеров. Но вы должны иметь вид, зарегистрированный под таким именем для получения к нему доступа, в противном случае будет вызвано исключение !NotFound.

Подробнее о регистрации браузерных видов директивой '''browser:page''' рассматривается в [[http://bluebream.zope.org/doc/1.0/manual/browserpage.html#man-browser-page|документации к браузерным видам]].

BlueBream How To

Виды по умолчанию для объектов

В BlueBream, вид обозревателя доступен посредством символов @@ перед его именем. Например, если у вас есть зарегистрированный вид с именем testview для контейнера с именем myobject, он доступен следующим образом: myobject/@@testview.

Контейнер

любой объект, реализующий интерфейс zope.content.interfaces.IContainer.

Вид также доступен без использования символов @@, при условии, что контент-объект с тем же именем не существует в рамках данного контейнера. В предыдущем примере, если объекта с именем testview нет в контейнере, то вид доступен через myobject/testview. Но BlueBream рекомендует всегда использовать символы @@ для доступа к видам.

Контент-объект

Если интерфейс предоставляет интерфейсный тип zope.app.content.interfaces.IContentType, то все объекты, предоставляющие этот интерфейс считаются контент-объектами.

В BlueBream index зарегистрирован как вид для интерфейса zope.container.interfaces.IContainer. Следовательно, если вы попытаетесь получить доступ к контейнеру без указания имени вида - BlueBream постарается отобразить вид зарегистрированный под именем index.

Вы можете изменить имя вида по умолчанию для конкретного типа объектов с помощью директивы browser:defaultView, доступной из zope.publisher. Если имя вида по умолчанию не настроено, и вы пытаетесь получить доступ к объекту не указывая имя вида, то получите ошибку ComponentLookupError со следующим сообщением: Couldn't find default view name. Например, если вы пытаетесь получить доступ к корневой папке следующим образом: http://localhost:8080/, а имя вида по умолчанию не настроено, то ошибка будет следующей:

ComponentLookupError: ("Couldn't find default view name",
<zope.site.folder.Folder object at 0xa3a09ac>,
<zope.publisher.browser.BrowserRequest instance
URL=http://localhost:8080>)

In order to use any ZCML except few built-ins like configure and include, you include the ZCML where it is defined the directive, conventionally in BlueBream it will be inside meta.zcml for any package. For example, to use defaultView directive, you need to include meta.zcml file inside zope.publisher:

  • <include package="zope.publisher" file="meta.zcml" />

Если вы создали приложение посредством шаблона проекта bluebream, у вас этой ошибки не возникнет, потому что в этом случае вид по умолчанию с именем index уже есть и настроен в конфигурационном файле application.zcml внутри главного пакета.

Если имя по умолчанию настроено, но вида с таким именем не существует, вы получите ошибку NotFound при попытке получить доступ к объекту прямо без указания имени вида. Например, если вид по умолчанию - index, а такой вид не зарегистрирован для корневой папки, то вы получите примерно следующую ошибку:

NotFound: Object: <zope.site.folder.Folder object at 0xac9b9ec>,
name: u'@@index'

Как упоминалось ранее, директива browser:defaultView определена в zope.publisher. Чтобы ее использовать, нужно включить meta.zcml директивой include:

   1 <include package="zope.publisher" file="meta.zcml" />

Например, вы можете указать вид по молчанию для IContainer следующим образом:

   1 <browser:defaultView
   2    name="index"
   3    for="zope.container.interfaces.IContainer"
   4    />

Если index зарегистрирован как имя вида по умолчанию, а вид явно не указан в URL, BlueBream попытается получить вид @@index для контейнеров. Но вы должны иметь вид, зарегистрированный под таким именем для получения к нему доступа, в противном случае будет вызвано исключение NotFound.

Подробнее о регистрации браузерных видов директивой browser:page рассматривается в документации к браузерным видам.

Документации/Bluebream/BluebreamHowTo (последним исправлял пользователь RostislavDzinko 2010-07-05 14:52:02)