Zola所用Tera模板引擎如何判断block块是否有值并条件渲染?
Tera模板实现title块为空时自动省略分隔符的正确写法
原有失效写法的核心原因
- 把连字符的判断逻辑写在了
title块内部,子模板重写title块时会完全覆盖块内所有原有代码,判断逻辑不会被执行 - 判断条件里的
title变量从未被定义赋值,条件永远为假,始终不会输出连字符
可直接使用的实现代码
在Zola内置的Tera模板环境中,通过内置块内容访问语法配合空白控制符即可实现需求,基础模板的title标签代码修改为如下:
<title> {%- block title -%}{%- endblock -%} {%- if block.title | trim is not empty -%} - {%- endif -%} Newbyte's blog </title>
代码逻辑说明
{%- -%}是Tera的空白控制语法,会自动移除标签前后的空格、换行,避免title内容出现多余空白block.title是Tera内置语法,可以直接获取title块渲染完成后的完整内容,不需要额外手动捕获赋值trim过滤器会过滤块内容首尾的空白字符,避免子模板误写空格、换行导致分隔符异常显示- 仅当
title块渲染后的有效内容非空时,才会输出-分隔符,块为空时直接输出站点名称
渲染效果验证
- 子模板定义title块内容(例如
{% block title %}Birds around the world{% endblock %})时,渲染结果符合预期:<title>Birds around the world - Newbyte's blog</title> - 子模板未定义title块内容时,自动省略分隔符:
<title>Newbyte's blog</title>
内容的提问来源于stack exchange,提问作者Newbyte
相关产品推荐
相关产品推荐

