Как мой шаблон-хамелеон может принимать флэш-сообщения от платформы пирамиды?

Я изучаю пирамиду, и кажется, что они пытаются заставить людей использовать хамелеон вместо мако, поэтому я подумал, что дам хамелеону шанс. Мне это нравится до сих пор, и я могу делать основные вещи в шаблоне, такие как циклы if и for, но я не уверен, как заставить появляться мигающие сообщения.

В учебнике по пирамиде это делается в списке дел но в примере wiki они не. Согласно инструкциям о сеансах и использованию учебник todolist в качестве примера. Мне удалось заставить свое приложение создавать сообщения, но я не могу получать их в своем шаблоне. Короче говоря, мне интересно, есть ли у хамелеона эквивалент этого кода mako:

  % if request.session.peek_flash():
  <div id="flash">
    <% flash = request.session.pop_flash() %>
    % for message in flash:
    ${message}<br>
    % endfor
  </div>
  % endif

person Lostsoul    schedule 26.06.2012    source источник
comment
такой настройки нет   -  person tshepang    schedule 04.02.2013


Ответы (1)


(Непроверенный) эквивалент в хамелеоне:

<div id="flash" tal:condition="request.session.peek_flash()">
  <span tal:omit-tag="" 
        tal:repeat="message request.session.pop_flash()">
      ${message}<br>
  </span>
</div>

Атрибут tal:omit-tag является необязательным; он удаляет тег <span> из вывода, так как он используется только как фиктивный тег для присоединения повторения. При его удалении выходные данные шаблона Chameleon будут соответствовать примеру Mako.

См. документацию по Chameleon, чтобы ознакомиться с введением и полной спецификацией того, как работает язык шаблонов.

person Martijn Pieters    schedule 26.06.2012
comment
Если пользователь еще не получил доступ к вашему сайту, доступ request.session автоматически создаст сеанс. Хотя это может не быть проблемой, это означает, что если только несколько пользователей будут иметь сеансы (например, только администраторы), то вы добавляете ненужные накладные расходы на свой сервер и ваших клиентов, у которых может быть/никогда не будет сеанса. Если это касается вас, я предлагаю проверить 'session' in vars(request), прежде чем вообще ссылаться на request.session. - person davidjb; 23.05.2014