Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 22, 2010 15:57:30

LightOfMooN
От:
Зарегистрирован: 2010-09-11
Сообщения: 127
Репутация: +  0  -
Профиль   Отправить e-mail  

BB metal

Может кто-нибудь попродробней объяснить механизм получения макросов?

описанное тут
http://wiki.python.su/%D0%94%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%86%D0%B8%D0%B8/Bluebream/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE#A.2BBBwEMAQ6BEAEPgRBBEs-
не даёт полного понимания.

Пример:

<b metal:use-macro="container/master_page/macros/copyright">
Macro goes here
</b>
Пытаюсь сделать по примеру:
есть файл index.pt
в нём определено макро:
<metal:block define-macro="master">
в том же каталоге другой шаблон. К примеру, test.pt
пытаюсь вызвать макро:
<html metal:use-macro="container/index.pt/macros/master">
Получаю KeyError: ‘container’

Убрал container:
<html metal:use-macro="index.pt/macros/master">
Получил PTRuntimeError:

Ниже идёт другой пример:
<p metal:define-macro="title"
tal:content="template/title">
template's title
</p>
Пытаюсь просто в тале вызвать template/title
аналогично KeyError: ‘container’

Подскажите, что я делаю не так, и как надо))
И как указать путь к файлу макроса, зная его от корня продукта (имеется ввиду в файловой системе).
Темплейты же могут из разных мест вызываться. Не хотелось бы в каждом указывать путь относительно container.

Есть вариант зарегистрировать вид @@mainmacro для любого интерфейса, но не очень нравится ощущение того, что с любого объекта можно будет вызвать пустой шаблон, дописав вид в строке адреса.



Отредактировано (Сен. 22, 2010 17:30:48)

Офлайн

#2 Сен. 22, 2010 20:49:21

LightOfMooN
От:
Зарегистрирован: 2010-09-11
Сообщения: 127
Репутация: +  0  -
Профиль   Отправить e-mail  

BB metal

сделал через вид
файл macro_main.pt:

<metal:block metal:define-macro="master">
регистрация в zcml:
<browser:page
for="*"
name="macro_main"
permission="zope.Public"
template="macro_main.pt"
/>
вид работает, но метал не включается:
metal:use-macro="context/@@macro_main/macros/master"
приводит к LocationError: (<zope.browserpage.simpleviewclass.SimpleViewClass from c:\intershop\src\intershop\browser\macro_main.pt object at 0x03414630>, ‘macros’)
metal:use-macro="macro_main.pt/macros/master"
приводит к PTRuntimeError:

Похоже, metal:define-macro не работает?

В тал шаблонах из:
•root - the system's top-most object.
•here - the object to which the template is being applied.
•container - the template's container object.
•template - the template itself.
•request - the publishing request object.
•user - the authenticated user object.
работат только request..



Отредактировано (Сен. 22, 2010 20:50:30)

Офлайн

#3 Сен. 22, 2010 21:38:30

LightOfMooN
От:
Зарегистрирован: 2010-09-11
Сообщения: 127
Репутация: +  0  -
Профиль   Отправить e-mail  

BB metal

Посмотрел репозиторий astoon'a “bbru”: там совсем не как в документации к BlueBream.
Регистрация макро через zcml-директиву macro.
Вызов в шаблоне тоже не из учебника =) <metal:block use-macro=“macro:poster”>
Попытался сделать по аналогии, но видать ещё слишком зелёный для этого. Директива zcml не проходит ('Unknown directive', u'http://namespaces.zope.org/z3c', u'macro')
(namespace z3c включил)
Хоть кто-нибудь, уделите пожалуйста 5 минут времени, опишите наконец решение =)



Офлайн

#4 Сен. 22, 2010 22:07:16

Sleepwalker
От:
Зарегистрирован: 2008-07-18
Сообщения: 68
Репутация: +  0  -
Профиль   Отправить e-mail  

BB metal

Есле не использовать решения от z3c, то вы все правильно написали до момента использования макроса.

metal:use-macro=“context/@@macro_main/macros/master” - должен иметь следующий вид:

<metal:block use-macro=“context/@@<имя_вида>/<название_макроса>”></metal:block>

В вашем же случае:

<metal:block use-macro=“context/@@macro_main/master”></metal:block>



Офлайн

#5 Сен. 22, 2010 23:01:31

LightOfMooN
От:
Зарегистрирован: 2010-09-11
Сообщения: 127
Репутация: +  0  -
Профиль   Отправить e-mail  

BB metal

Господи, оно заработало =)
Вы мой спаситель.

P.S. упало доверие к офф.документации



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version