Шаблон хамелеона глобальные переменные
Я использую Pyramid 1.3 и их шаблоны, написанные на хамелеоне. Поскольку различным страницам или шаблонам может потребоваться глобальное изменение таблицы стилей для каждой страницы, я хотел бы иметь возможность переопределять классы тега body на странице (конечно, я бы предпочел сделать это из шаблонов).
<body class="${global_variable_or_something_else}"></body>
Что я пробовал:
- Использование tal:define="global body_class" из вложенных макросов. Не работает
- Я пытался использовать
<metal:div metal:define-slot="vars">...variable definition...</metal:div>
а также<metal:div metal:fill-slot="vars">...redefinition...</metal:div>
и переопределение переменных в подмакросах. Это работает, но что, если у меня есть несколько определений переменных в родительском шаблоне, и мне нужно переопределить только одно?
Есть ли хороший способ сделать это лучше с METAL?
1 ответ
Решение
Глобальные переменные в шаблонах страниц, такие как глобальные переменные в Python, могут быть переопределены. Таким образом, вместо этого вы делаете следующее:
<rootelement metal:define-macro="macroname"
tal:define="global var1 value1; global var2 value2">
<metal:overrides define-slot="overrides"></metal:overrides>
<!-- some template code using var1 and var2 -->
</rootelement>
Тогда используйте metal:fill-slot
обеспечить переопределения; Вы можете переопределить любое количество переменных или столько, сколько хотите:
<rootelement metal:use-macro="macroname">
<metal:overrides fill-slot="overrides"><tal:defines define="global var1 differentvalue" /></metal:overrides>
</rootelement>