Проверить, существует ли переменная в tmpl_context (Python, Pylons, Genshi)?

Я пытаюсь выяснить, как проверить, существует ли переменная в контексте шаблона «tmpl_context», используя Pylons и Python. Я пытаюсь сделать следующее:

У меня есть шаблон компоновки пилонов. Он должен содержать раздел сообщения тогда и только тогда, когда переменная c.messages существует в контексте. Раздел сообщения выглядит следующим образом:

<div py:if="len(c.messages) > 0">
  <py:for each="msg in c.messages">
    <strong>${msg}</strong>
  </py:for>
</div>

Это приводит к ошибке, если контроллер не определяет c.messages. Поэтому я хотел бы включить это, только если переменная определена. Есть ли решение этой проблемы?


person Fynn    schedule 09.11.2010    source источник


Ответы (3)


У Генши есть определенный метод для этого.

если определено (сообщения):

http://genshi.edgewall.org/wiki/Documentation/templates.html#defined-name

person Vince Spicer    schedule 09.11.2010

Превратите тест в hasattr(c, 'messages') and len(c.messages) > 0 .. или просто установите сообщения на [] по умолчанию

person Jochen Ritzel    schedule 09.11.2010
comment
Обратите внимание, что если c — это словарь, вышеописанное не сработает, но вместо этого вы можете использовать len(c.get('messages', [])) > 0. - person Devin Jeanpierre; 31.08.2013

Я ценю, что выкапываю старую тему, но у меня есть альтернативное решение.

Я всегда изо всех сил пытался заставить работать define() должным образом. Наиболее эффективным решением, которое я нашел, является использование следующего списка:

py:if="myobject.thelist.get('blah',0) == 0"

Базовый Python в Genshi — если он не определен, мы присваиваем ему значение по умолчанию. Если вам нужно убедиться, что значение по умолчанию не загрязнит ваши данные, верните что-то еще, кроме 0.

person Karl M.W.    schedule 14.11.2013