1.摘要
我找不到Jinja2中if any() in object/if all() in object这样的表达式的正确语法是什么。
2. MCVE
在没有重复代码的情况下,如何获得相同的结果?
3.没有帮助
select()过滤器,就像堆栈溢出的这个答案中推荐的那样。如下所示:
KIRA_BLOCK =“”{如果(14,4,7)\x{1,5) %} (1,5) %}基拉女神!{% endif %}“”any()过滤器,就像在堆栈溢出的相同答案中推荐的那样。如下所示:
“”Jinja2(如果有的话)在对象MCVE中。“”从jinja2导入环境jinja2导入模板环境= environment.filters" any“=any KIRA_BLOCK =”“{% if (14,4,7)区(14,4,7)\x{1,5) %} Kira女神!{% endif %}”打印模板(KIRA_BLOCK).render()4.实例
预防XY问题
我在静态站点生成器鹈鹕中使用类似的模板。示例:
{# [INFO] If any of the classes "attention", "caution" or "warning" exists in my article, I add specific styles #}
{% if "class=\"attenion\"" in article.content or if "class=\"caution\"" in article.content or if "class=\"warning\"" in article.content %}
<link rel="preload" href="path/to/css/third-party/Admonition/admonition-warning.min.css" as="style" onload="this.rel='stylesheet'">
{# [INFO] Elif all classes "faq", "help" and "question" exists in my article, I add another styles #}
{% elif "class=\"faq\"" in article.content and if "class=\"help\"" in article.content and if "class=\"question\"" in article.content %}
<link rel="preload" href="path/to/css/third-party/Admonition/admonition-question.min.css" as="style" onload="this.rel='stylesheet'">
{% endif %}我不明白如何从这些模板中删除硬编码。
谢谢。
发布于 2022-09-10 12:43:35
我找不到Jinja2中
if any() in object/if any() in object这样的表达式的正确语法是什么。
在Python中,any()函数不是这样工作的。你可以这样写:
if any(value == 4 for value in mylist):
...any()函数(如文献资料所示)等价于:
def any(iterable):
for element in iterable:
if element:
return True
return False不幸的是,上面的内容并没有很好地转化为Jinja,因为Jinja不支持列表/元组理解,没有它,any()函数就没有那么有用了。
看看你真正想做的事:
{#
[INFO] If any of the classes "attention", "caution" or
"warning" exists in my article, I add specific styles
#}
{% if "class=\"attenion\"" in article.content
or if "class=\"caution\"" in article.content
or if "class=\"warning\"" in article.content %}
<link rel="preload" href="path/to/css/third-party/Admonition/admonition-warning.min.css" as="style" onload="this.rel='stylesheet'">
{% endif %}您可以注册如下所示的自定义has_class过滤器:
def has_class(content, classnames):
return any(f'class="{name}"' in content for name in classnames)像这样使用它:
{#
[INFO] If any of the classes "attention", "caution" or
"warning" exists in my article, I add specific styles
#}
{% if article.content|has_class(['attention', 'caution', 'warning']) %}
<link rel="preload" href="path/to/css/third-party/Admonition/admonition-warning.min.css" as="style" onload="this.rel='stylesheet'">
{% endif %}https://stackoverflow.com/questions/73670637
复制相似问题