Как сделать переменную в jijna2 по умолчанию равной "", если объект None вместо того, чтобы делать что-то вроде этого?
{% if p %}
{{ p.User['first_name']}}
{% else %}
NONE
{%endif %}
Итак, если объект p равен None, я хочу, чтобы значения p (first_name и last_name) по умолчанию были равны "". В принципе
nvl(p.User[first_name'], "")
Ошибка получения:
Error: jinja2.exceptions.UndefinedError
UndefinedError: 'None' has no attribute 'User'
p
никогда не возвращаласьNone
. Вместо этогоNone
функция должна возвращать прокси-объект, который имеет ту же структуру, что и реальный объект, но загружается с нужными вам значениями по умолчанию.Ответы:
Используйте
none
встроенную функцию ( http://jinja.pocoo.org/docs/templates/#none ):или
или если вам нужна пустая строка:
источник
none
в ответе. Моя проблема была решена после того, как я исправил случай None.источник
Согласно документам вы можете просто сделать:
Причина
None
преобразуетсяFalse
в логический контекст.Обновление : как упоминалось Линдес, он работает только для простых типов данных.
источник
default
- это именно то, что мне нужно для моего конкретного случая, так что ... просто не голосовать. (Редактирование этого ответа вполне может принести ему одобрение, за исключением того, что я думаю, что это, вероятно, трудно применитьdefault
к этой ситуации)В дополнение к другим ответам можно написать что-то еще, если переменная None, например:
источник
x or y
естьif x is false, then y, else x
. См .: 5.2. Логические операции - и, или, неСледуя этому документу, вы можете сделать это следующим образом:
источник
Чтобы избежать генерации исключения, когда «p» или «p.User» имеет значение None, вы можете использовать:
источник
В качестве другого решения (похожего на некоторые предыдущие):
Обратите внимание, что после последней переменной (p.User ['first_name']) нет
if defined
теста.источник
Обычно я определяю
nvl
функцию и помещаю ее вglobals
иfilters
.Использование в шаблоне:
источник
Начиная с Ansible 2.8, вы можете просто использовать:
См. Https://docs.ansible.com/ansible/latest/porting_guides/porting_guide_2.8.html#jinja-undefined-values.
источник