【发布时间】:2015-11-26 08:33:14
【问题描述】:
所以我在我的项目中使用 dotLiquid (1.8.0) 来创建一些 HTML 模板,这些模板用于通过 EO.pdf 创建 PDF
所以基本上,我想检查一个天数(== 日期)数组的给定日期是否在一周内,并在每周之后添加一个分页符。
为了让我的问题更清楚,下面是相关代码:
{% for day in plan.Days %}
...
<table>
<tbody>
<tr class="footnote">
<td>** Debug:</td>
</tr>
<tr><td>Index: {{forloop.index}}, DateTypeChoice: {{plan.DateTypeChoice }}</td> <!-- just debug-statements -->
</tr>
</tbody>
</table>
{% assign endofweek = forloop.index | modulo: plan.DateTypeChoice %}
<p>endofweek: {{endofweek}}</p>
{%if endofweek == 0 %}
<p>"dubididu Index: " {{forloop.index}}</p>
<div style="page-break-before: always"></div>
{% endif %}
{% endfor %}
</body>
</html>
plan.DateTypeChoice是一个整数值,包含一周中的天数(5 或 7 天)。它在我的 Drop-Model 中定义为
public int DateTypeChoice { get; set; }
现在在我的测试场景中,调试语句(Index 和 DateTypeChoice)显示了我期望的值,但实际上 endofweek 包含例如(见下文)5 而不是 0我不知道为什么会这样。
示例输出为:
** Debug:
Index: 5, DateTypeChoice: 5
endofweek: 5 // This should be 0 imho
我也尝试将括号放在作业中,例如
{% assign endofweek = (forloop.index | modulo: plan.DateTypeChoice) %}
然后我得到一个错误抛出(值不能为 NULL)。
我希望有人可以在这里帮助我。也许我使用模数错误?据我所知,forloop.index 是一个数值,从模型给模板的数值也被解析器视为数值,所以我没有想法。
编辑:
基于this 线程,我尝试使用捕获而不是分配,但结果相同。代码:
{% capture endofweek %} {{ forloop.index | modulo: plan.DateTypeChoice }}{% endcapture %}
<p>"endofweek: " {{endofweek}}</p> //again 5 :-(
{%if endofweek == 0 %}
非常感谢您的帮助 :-)
【问题讨论】:
-
嗯,我记得过滤器不适用于
assign标签。而 IIRC,capture值始终是字符串。不确定这是否可行,但您可以尝试在if标签中使用内联过滤器:{%if (forloop.index | modulo: plan.DateTypeChoice) == 0 %} -
感谢您的评论。我刚试过,很奇怪,它总是(!)被击中,不仅仅是每 5 次左右。尽管在 if 条件下,我输出了相同的计算,但它告诉我它不是 0。非常奇怪的行为。另外,我尝试只添加简单的旧
{{ 3 | modulo:2 }},从我模板中某处的液体文档中复制出来,但我得到的是1,而不是3。似乎只是未应用过滤器,因此解析器仅使用第一个参数。我在 google 组中为 dotliquid 创建了一个帖子,希望那里的人可以提供帮助。现在,我认为我必须重构我的模型。
标签: c# template-engine liquid modulo dotliquid