В Zope 2.12 мы можем объявить «каталог ресурсов браузера», как это, используя configure.zcml
:
<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:browser="http://namespaces.zope.org/browser"
xmlns:five="http://namespaces.zope.org/five"
xmlns:i18n="http://namespaces.zope.org/i18n"
i18n_domain="company"
>
<browser:resourceDirectory
directory="./"
name="static"
/>
</configure>
Чистый эффект - это URL-адрес типа http://localhost:8000/++resource++static/main.js
на папку в файловой системе, скажем site/eggs/module.egg/static
.
Есть ли программный способ доступа к этой информации? Например, учитывая static
, я должен зарегистрировать реальное местоположение с именем static
, т. Е. /site/eggs/module.egg/static
.
. Я проверил документацию и некоторые сценарии тестирования, которые заставили меня прийтис помощью скрипта ниже - но он не работает;и я не знаю, что такое Zope!
from zope.publisher.browser import TestRequest
from zope.browserresource.directory import \
DirectoryResourceFactory, DirectoryResource
def getPathFromBRD():
# I am supposed to send 'context' object as the first param, but I
# don't know how to create that - so I am sending the URL! My intuition
# says that I should be able to get this without 'context' or 'request'
# since it is about the Zope installation and not specific to a single
# request, but that doesn't seem to be the case.
context = 'http://localhost:4547'
request = TestRequest()
directory_resource = DirectoryResource(context, request)
directory_resource.get('static')
Обновление
Работает нормально, если в моем веб-приложении есть метод, подобный этому:
def method(self, name)
# typical request object
request = self.REQUEST
# name is like '++resource++static'
request.traverseName(self.cms, name).context.path
Здесь cms
как корневая папка в нашем веб-приложении. Однако я пытаюсь сделать это с помощью простого сценария без запуска веб-приложения.