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; }

现在在我的测试场景中,调试语句(IndexDateTypeChoice)显示了我期望的值,但实际上 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后,一切正常..