Jinja: Adicionar operadores bit a bit

Criado em 10 jul. 2013  ·  9Comentários  ·  Fonte: pallets/jinja

Para completar, os operadores bit a bit devem ser permitidos. Atualmente, é preciso fazer o seguinte para realizar um deslocamento em um inteiro.

{{ (12).__rshift__(other) }}

Todos 9 comentários

Operações bit a bit não devem ser usadas em modelos. Exponha funções se precisar.

Uau, isso é um ponto de vista opinativo.

Eu me vejo usando jinja com o Home Assistant e manipulando cores RGB. Eu quero renderizar {'r': 255, 'g': 255, 'b': 255} no formato 0xRRGGBB , mas sem sorte porque o jinja não vem com esses recursos úteis.

Qual sua sugestão para contornar isso? A implementação de funções realmente funcionaria, mas e se alguém quiser 0xBBGGRR ? Não é trabalho do jinja deixar o usuário decidir sobre a renderização?
Concordo que um recurso como esse não deve ser abusado, mas há casos de uso para isso.

Desculpe se você achar este comentário duro, esta não é minha intenção. Eu enfrento o verdadeiro desespero :cry:

Você não precisa de operadores bit a bit para isso. Basta usar a formatação de string:

{{ '0x{r:02X}{g:02X}{b:02X}'.format(**color) }}

Obrigado, eu adicionei uma maneira de convertê-lo de volta para decimal

{{ '0x{r:02X}{g:02X}{b:02X}'.format(**color) | int(base=16) }}

Percebi que você usa .format em vez do filtro format . Estou um pouco confuso para saber o que é permitido e o que não é permitido em um modelo jinja. Qual é a maneira preferida de fazer isso? Quando usar um ou outro?

Citando o zen do Python: There should be one-- and preferably only one --obvious way to do it.

Por favor, use o IRC ou a lista de discussão para este tipo de discussão.

Usar o filtro format também seria possível:

{{ '0x%(r)02X%(g)02X%(b)02X'|format(**color) }}

O filtro format basicamente apenas envolve o modulo-operator, habilitando o antigo mecanismo de formatação de strings do Python. O método format , por outro lado, nem vem do jinja2, mas é um método embutido de objetos str e unicode em Python, e usado para o novo mecanismo de formatação de strings .

Em Python, o novo mecanismo é preferível ao antigo, mas em jinja2 gostamos de manter uma API estável. Se não fosse por compatibilidade com versões anteriores, acho que poderíamos ter removido ou alterado o filtro format . Eu não tenho certeza do que sugerir aqui, eu acho, apenas use o que você preferir.

Mas sim, esta discussão está se tornando off-topic, e este provavelmente não é o lugar certo para continuá-la.

Também estou precisando de operações bit a bit - pelo menos comparações. Eu tenho um sensor no HomeAssistant que usa um valor de máscara de bits para representar vários estados em um valor. No HomeAssistant, quero dividir esse valor de bitmask em valores de sensor individuais, o que seria fácil de fazer com um simples {{ state(sensor.with_bitmaskvalue) & 1 }} como modelo de valor para meu sensor. No momento, é quase impossível fazer isso por meio de um modelo Jinja - pelo menos de acordo com minha pesquisa

Parece que eles deveriam expor um teste personalizado como state(sensor.with_bitmaskvalue) is bitmask 1

desculpe o barulho, acabei de descobrir que eles adicionaram um filtro personalizado bitwise_and() que faz o truque para mim

Esta página foi útil?
0 / 5 - 0 avaliações