Como tornar uma variável no jijna2 padrão para "" se o objeto for None em vez de fazer algo parecido com isto?
{% if p %}
{{ p.User['first_name']}}
{% else %}
NONE
{%endif %}
Portanto, se o objeto p for None, eu quero padronizar os valores de p (first_name e last_name) para "". Basicamente
nvl(p.User[first_name'], "")
Erro ao receber:
Error: jinja2.exceptions.UndefinedError
UndefinedError: 'None' has no attribute 'User'
p
nunca retornarNone
. Em vez daNone
função, retorne um objeto proxy que tenha a mesma estrutura que um objeto real, mas seja carregado com os valores padrão que você deseja.Respostas:
Use a
none
função incorporada ( http://jinja.pocoo.org/docs/templates/#none ):ou
ou se você precisar de uma string vazia:
fonte
none
na resposta. Meu problema foi resolvido depois que eu corrigi o caso de None.fonte
De acordo com os documentos, você pode fazer:
A causa é
None
convertidaFalse
em contexto booleano.Atualização : Como os lindes mencionaram, ele funciona apenas para tipos de dados simples.
fonte
default
exatamente o que eu precisava para o meu caso em particular, então ... simplesmente não votar. (Uma edição para esta resposta pode muito bem ganhar-lhe um upvote, exceto que eu acho que é provavelmente difícil aplicardefault
a esta situação)Como complemento a outras respostas, pode-se escrever outra coisa se a variável for None como este:
fonte
x or y
éif x is false, then y, else x
. Veja: 5.2. Operações booleanas - e, ou, nãoApós este documento, você pode fazer o seguinte:
fonte
Para evitar lançar uma exceção enquanto "p" ou "p.Usuário" é Nenhum, você pode usar:
fonte
Como outra solução (semelhante a algumas anteriores):
Observe que a última variável (p.User ['first_name']) não possui o
if defined
teste após ela.fonte
Normalmente, defino uma
nvl
função e a coloco emglobals
efilters
.Uso em um modelo:
fonte
A partir do Ansible 2.8, você pode apenas usar:
Consulte https://docs.ansible.com/ansible/latest/porting_guides/porting_guide_2.8.html#jinja-undefined-values
fonte