Проверить, существует ли переменная в tmpl_context (Python, Pylons, Genshi)? - PullRequest
6 голосов
/ 09 ноября 2010

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

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

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

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

Ответы [ 3 ]

5 голосов
/ 09 ноября 2010

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

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

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

3 голосов
/ 09 ноября 2010

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

0 голосов
/ 14 ноября 2013

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

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

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

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

...