Jinja模板移除多余空白(无HTML)的技术实现问询
问题描述
我编写了如下Jinja模板:
ФИО: {{ fullname }} {% for task, fact_hours, plan_hours in week_results %} {%- if fact_hours != 0 and plan_hours != 0 -%} Задача №:{{ task.id }} "{{ task.name }}" Фактическое время: {{ fact_hours }} Планируемое время: {{ plan_hours }} {%- if fact_hours <= plan_hours %} Соответствует графику {%- else %} НЕ соответствует графику {%- endif +%} {% endif %} {%- endfor %}
当前渲染结果存在两个问题:
- 循环迭代的任务行前有多余制表符
- 当
{%- if fact_hours != 0 and plan_hours != 0 -%}条件不满足时会输出空行
希望达到的目标格式:
ФИО: Оксана Владимировна Абракадабровна Задача №:511 "Доработки PlanFix" Фактическое время: 3.0 Планируемое время: 3.0 Соответствует графику Задача №:8710 "Аналитика поступлений и затрат" Фактическое время: 0.8 Планируемое время: 2.0 Соответствует графику Задача №:8753 "0. Сопровождение клиента" Фактическое время: 2.2 Планируемое время: 2.5 Соответствует графику
要求:移除循环迭代首行前的制表符,条件不满足时不输出任何内容,且不使用HTML标签。
解决方案
核心是通过**Jinja的空白控制标记-**精准控制模板中的空白,同时调整缩进结构,避免多余空格和空行:
修改后的模板如下:
ФИО: {{ fullname }} {%- for task, fact_hours, plan_hours in week_results %} {%- if fact_hours != 0 and plan_hours != 0 %} Задача №:{{ task.id }} "{{ task.name }}" Фактическое время: {{ fact_hours }} Планируемое время: {{ plan_hours }} {%- if fact_hours <= plan_hours %} Соответствует графику {%- else %} НЕ соответствует графику {%- endif %} {%- endif %} {%- endfor %}
关键调整点:
- 循环标签的空白控制:在
{%- for ... %}开头加上-,移除循环前的多余换行和空格,避免条件不满足时产生空行 - 条件标签的空白控制:
{%- if fact_hours != 0 ... %}开头加-,同时去掉原条件标签末尾的-,避免吃掉后续任务行的换行 - 缩进结构调整:把任务行
Задача №:...顶格写,内部的时间行保持缩进,确保输出格式符合要求 - 嵌套条件的空白控制:将嵌套的
{%- if ... %}开头加-,并调整缩进,保证状态行的格式一致,同时避免多余空格
这样修改后,既不会在条件不满足时输出空行,也能保证任务行没有多余前置制表符,完全匹配目标格式。
内容的提问来源于stack exchange,提问作者555Russich
相关产品推荐
相关产品推荐

