我有鹈鹕网站的bootstrap3主题。该主题使用字体Awesome通过链接到社交媒体帐户放置图标。字体名称是通过使链接文本小写和用破折号替换所有空格来确定的。
的问题是,有时我的链接文本不能映射到字库--一个很棒的类名。例如,信封图标是由envelope类提供的,但我真的希望Email作为链接文本在网站上。
我可以在Font样式表中更改类名,但是这样我就不能使用Bootstrap了,每次我将Font更新到新版本时,我都要做这样的修改。
我决定修改鹈鹕模板,并在编写类名之前进行必要的转换。到目前为止,我的代码如下所示:
{% set name_sanitized = name|lower|replace('+','-plus')|replace(' ','-')|replace('stackexchange', 'stack-exchange')|replace('rss-feed', 'rss')|replace('email', 'envelope') %}我可以用replace替换这条dict调用链吗?就像这样:
{% set replacements = dict('+' = '-plus', ' ' = '-',
'stackexchange' = 'stack-exchange', 'rss-feed' = 'rss',
'email' = 'envelope') %}
{% set name_sanitized = name|lower|??? %}如果没有,是否有其他方法使这个部分更易读和更易于长期维护?
发布于 2015-11-01 18:53:11
这看起来像是自定义Jinja2滤波器的工作。
def dict_replace(text, replacements):
for key, val in replacements.iteritems():
text = text.replace(key, val)
return text将筛选器添加到鹈鹕配置文件中
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更新变量。
https://stackoverflow.com/questions/33465542
复制相似问题