在jinja中进行Base64解码字符串

10

我刚开始使用Python和Flask,非常喜欢它们。我正在返回一个查询结果用于在Jinja模板中显示,其中有一个被返回的列包含了base64编码的数据。请问如何解码该数据并将其显示出来。


这不是 https://dev59.com/5-o6XIcBkEYKwwoYTy4d 的复制,因为那是关于 Python 中的 b64 解码,而这是关于 Jinja 的。 - Neil McGuigan
2个回答

14

6
它只能在Ansible的Jinja2实现中工作。 https://github.com/ansible/ansible/blob/ed7623ecdec8585282ce91f1534d02e6a38c22a4/lib/ansible/plugins/filter/core.py#L377 - Maks Skorokhod
2
请注意,结果必须是有效的UTF-8字符串,否则您将在其中获得U+FFFE替换字符。(例如,您不能以这种方式安全地处理base64编码的公钥。) - Ulrich Schwarz
使用SaltStack时,我必须使用{{ encoded_text | base64_decode }},请参阅SaltStack Jinja文档 - mihca

9

你可以尝试编写自定义过滤器

# add filter to jinja2 env
environment.filters['b64decode'] = base64.b64decode

# in template use
{{ value|b64decode }}

无需翻译,因为它已经在默认过滤器中。https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html#manipulating-strings - XenGi
8
默认过滤器仅适用于Ansible,而不适用于Jinja。参考链接:https://jinja.palletsprojects.com/en/2.10.x/templates/#list-of-builtin-filters - Maks Skorokhod
1
b64decode返回的是字节,但你可能想要一个字符串:environment.filters['b64decode'] = lambda s: base64.b64decode(s).decode() - dashingdove

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接