gpt4 book ai didi

python - 如何在 Jinja2 中对字符串执行多次替换?

转载 作者:行者123 更新时间:2023-11-30 23:04:53 25 4
gpt4 key购买 nike

我有Pelican网站 bootstrap3主题。该主题使用 Font Awesome 通过社交媒体帐户的链接来放置图标。 Font Awesome 类名称是通过将链接文本小写并用破折号替换所有空格来确定的。

问题是,有时我的链接文本不会映射到 Font Awesome 类名称。例如,信封图标是由 envelope 类提供的,但我确实希望 Email 作为网站上的链接文本。

我可以更改 Font Awesome 样式表中的类名称,但这样我将无法使用 Bootstrap CDN,并且每次将 Font Awesome 更新到新版本时都必须进行此类修改。

我决定修改 Pelican 模板,并在写入类名之前进行必要的转换。到目前为止,我的代码如下所示:

{% set name_sanitized = name|lower|replace('+','-plus')|replace(' ','-')|replace('stackexchange', 'stack-exchange')|replace('rss-feed', 'rss')|replace('email', 'envelope') %}

我可以使用 dict 替换此 replace 调用链吗?像这样的事情:

{% set replacements = dict('+' = '-plus', ' ' = '-', 
'stackexchange' = 'stack-exchange', 'rss-feed' = 'rss',
'email' = 'envelope') %}
{% set name_sanitized = name|lower|??? %}

如果没有,是否有其他方法可以使这部分从长远来看更具可读性和可维护性?

最佳答案

这看起来像是 custom Jinja2 filter 的工作.

def dict_replace(text, replacements):
for key, val in replacements.iteritems():
text = text.replace(key, val)
return text

将过滤器添加到您的 Pelican config file :

JINJA_FILTERS = {'dict_replace': dict_replace}

然后在模板中使用过滤器:

{% set name_sanitized = name|lower|dict_replace(replacements) %}
<小时/>

或者,您可以直接在 Jinja2 中实现此功能,但这非常尴尬。

{% set _name_sanitized = {'': name|lower} %}
{% for key, val in replacements.items() %}
{% if _name_sanitized.update('', _name_sanitized['']|replace(key, val) %}{% endif %}
{% endfor %}
{% set name_sanitized = _name_sanitized[''] %}

_name_sanitized 变量是必需的,因为循环在 Jinja2 中有自己的作用域,因此您不能仅使用 set 更新变量。

关于python - 如何在 Jinja2 中对字符串执行多次替换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33465542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com