所以我用dotLiquid(1.8.0)在我的项目创造出用于通过EO.pdfdotLiquid:模计算
,以创建PDF所以基本上一些HTML模板不按预期工作,我想检查Days(== Dates)数组的给定日期是否在一周内,并在每周后添加分页符。
为了使我的问题更加明确,这里的相关代码第一:
{% 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天)的天数的整数值。它在我的下拉式模式定义为
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创建了一篇文章,希望有人能帮助。现在,我认为我必须重构我的模型。 – Dominik