dotLiquid:模计算未按预期工作
dotLiquid: modulo-calculation not working as expected
所以我正在使用 dotLiquid (1.8.0) in my Project to create some HTML-Templates which are used to create PDFs via EO.pdf
所以基本上,我想检查一组 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 天)。它在我的 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 %}
在此非常感谢您的帮助:-)
终于找到解决方法了...
重新分析后,我发现在我的模板中应用了没有过滤器。也就是说,我找到了正确的解决方案 here。
我正在使用
Template.NamingConvention = 新 DotLiquid.NamingConventions.CSharpNamingConvention();
也是,所以把modulo:
改成Modulo
大写M后,一切正常.. 唉
所以我正在使用 dotLiquid (1.8.0) in my Project to create some HTML-Templates which are used to create PDFs via EO.pdf
所以基本上,我想检查一组 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 天)。它在我的 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 %}
在此非常感谢您的帮助:-)
终于找到解决方法了...
重新分析后,我发现在我的模板中应用了没有过滤器。也就是说,我找到了正确的解决方案 here。
我正在使用
Template.NamingConvention = 新 DotLiquid.NamingConventions.CSharpNamingConvention();
也是,所以把modulo:
改成Modulo
大写M后,一切正常.. 唉