7191
Комментарий:
|
7807
|
Удаления помечены так. | Добавления помечены так. |
Строка 70: | Строка 70: |
You are working in your instance or developing your package and then you discover that there is a package you may find useful, let’s say ‘ldappas’. Edit setup.py and add in install_requires the name of the package: | Вы работаете в вашем экземпляре приложения или разрабатываете свой пакет, и понимаете, что он может быть полезным еще где-нибудь, скажем пакет '''ldappas'''. Отредактируйте '''setup.py''' и добавьте имя пакета в '''install_requires''': |
Строка 72: | Строка 72: |
{{{#!highlight python | |
Строка 79: | Строка 80: |
Now it is time to rebuild your application: | }}} |
Строка 81: | Строка 82: |
Теперь наступает время для перестройки приложения: {{{#!highlight bash |
|
Строка 82: | Строка 86: |
Finally, remember to register the new package in etc/site.zcml: | }}} |
Строка 84: | Строка 88: |
И наконец, не забудьте зарегистрировать новый пакет в ''etc/site.zcml'': {{{#!highlight xml |
|
Строка 89: | Строка 96: |
If there is any new ZCML directive declared in this package, you need to include the configuration file where the directive is registered. Normally the ZCML directives will be registered in meta package. You can use the file option as given below: | }}} |
Строка 91: | Строка 98: |
Если в этом пакете есть новая ZCML директива, вам нужно подключить конфигурационный файл, в котором эта директива зарегистрирована. Принято регистрировать ZCML директивы в пакете ''meta''. Используйте опцию '''file''' как показано ниже: {{{#!highlight xml |
|
Строка 97: | Строка 107: |
Then restart the application: | }}} |
Строка 99: | Строка 109: |
Теперь нужно перезапустить приложение: {{{#!highlight bash |
|
Строка 100: | Строка 113: |
}}} |
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 следующим образом:
Если index зарегистрирован как имя вида по умолчанию, а вид явно не указан в URL, BlueBream попытается получить вид @@index для контейнеров. Но вы должны иметь вид, зарегистрированный под таким именем для получения к нему доступа, в противном случае будет вызвано исключение NotFound.
Подробнее о регистрации браузерных видов директивой browser:page рассматривается в документации к браузерным видам.
Добавление новой зависимости (пакета)
Вы работаете в вашем экземпляре приложения или разрабатываете свой пакет, и понимаете, что он может быть полезным еще где-нибудь, скажем пакет ldappas. Отредактируйте setup.py и добавьте имя пакета в install_requires:
Теперь наступает время для перестройки приложения:
1 $ ./bin/buildout
И наконец, не забудьте зарегистрировать новый пакет в etc/site.zcml:
Если в этом пакете есть новая ZCML директива, вам нужно подключить конфигурационный файл, в котором эта директива зарегистрирована. Принято регистрировать ZCML директивы в пакете meta. Используйте опцию file как показано ниже:
Теперь нужно перезапустить приложение:
1 $ ./bin/paster serve debug.ini