Jinja: 添加按位运算符

创建于 2013-07-10  ·  9评论  ·  资料来源: pallets/jinja

为了完整起见,应该允许使用按位运算符。 目前,必须执行以下操作才能对整数执行移位。

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

所有9条评论

按位运算不应在模板中使用。 如果需要,公开函数。

哇,这是一个自以为是的观点。

我发现自己使用 jinja 和 Home Assistant 并操纵 RGB 颜色。 我想将{'r': 255, 'g': 255, 'b': 255}呈现为0xRRGGBB格式,但没有运气,因为 jinja 没有那些方便的功能。

你对解决这个问题有什么建议? 实现功能确实可行,但如果有人想要0xBBGGRR怎么办? 让用户决定渲染不是 jinja 的工作吗?
我同意这样的功能不应该被滥用,但它有一些用例。

对不起,如果你觉得这个评论很苛刻,这不是我的意图。 我面临真正的绝望:cry:

您不需要按位运算符。 只需使用字符串格式:

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

谢谢,我添加了一种将其转换回十进制的方法

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

我注意到您使用.format而不是format过滤器。 我有点困惑,不知道在 jinja 模板中什么是允许的,什么是不允许的。 这样做的首选方法是什么? 何时使用其中一种?

引用 Python 之禅: There should be one-- and preferably only one --obvious way to do it.

请使用 IRC 或邮件列表进行此类讨论。

也可以使用format过滤器:

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

format过滤器基本上只是包装了模运算符,启用了 Python 的旧字符串格式化机制。 另一方面, format方法甚至不是来自 jinja2,而是 Python 中strunicode对象的内置方法,用于新的字符串格式化机制

在 Python 中,新机制比旧机制更受欢迎,但在 jinja2 中,我们喜欢维护一个稳定的 API。 如果不是为了向后兼容,我想我们可能已经删除或更改了format过滤器。 我不知道在这里建议什么,我猜,只是使用你喜欢的任何一个。

但是,是的,这个讨论变得离题了,这可能不是继续讨论的正确地方。

我也需要按位运算 - 至少是比较。 我在 HomeAssistant 中有一个传感器,它使用位掩码值在一个值中表示多个状态。 在 HomeAssistant 中,我想将此位掩码值拆分为单独的传感器值,这很容易使用简单的{{ state(sensor.with_bitmaskvalue) & 1 }}作为传感器的值模板来完成。 现在几乎不可能通过 Jinja 模板做到这一点——至少根据我的研究

听起来他们应该公开一个自定义测试,例如state(sensor.with_bitmaskvalue) is bitmask 1

抱歉,我刚刚发现他们添加了一个自定义过滤器bitwise_and()这对我有用

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

glasserc picture glasserc  ·  4评论

mtrstudio picture mtrstudio  ·  5评论

htgoebel picture htgoebel  ·  4评论

AMDmi3 picture AMDmi3  ·  4评论

Yannik picture Yannik  ·  4评论