dotLiquid:模数计算无法按预期工作

时间:2015-09-01 07:30:54

标签: c# template-engine liquid modulo dotliquid

所以我在我的项目中使用dotLiquid(1.8.0)来创建一些用于通过EO.pdf创建PDF的HTML模板

所以基本上,我想检查天数组(==日期)的给定日期是否在一周内,并在每周后添加分页符。

为了使我的问题更清楚,首先是相关代码:

{% 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包含了例如(见下文){{ 1}}而不是5而我不知道原因。

示例输出是:

0

我还尝试将括号括在作业中,例如

** Debug:
Index:  5, DateTypeChoice: 5
endofweek: 5 // This should be 0 imho

然后我收到一个错误(值可以&#39; T为NULL)。

我希望有人可以帮助我。也许我使用模数错了?据我所知,forloop.index是一个数值,并且模型中给模板的数值也被解析器视为数值,所以我没有想法。

修改

基于this线程,我尝试使用捕获而不是分配,但结果相同。代码:

    {% assign endofweek = (forloop.index | modulo: plan.DateTypeChoice) %}

这里非常感谢帮助: - )

1 个答案:

答案 0 :(得分:1)

最后我找到了解决方案......

重新分析后,我发现在我的模板中应用了 no 过滤器。也就是说,我找到了一个正确的解决方案here

我正在使用

Template.NamingConvention = new DotLiquid.NamingConventions.CSharpNamingConvention();

也是如此,所以在将modulo:更改为Modulo且资本 M 之后,一切正常。叹息