2015-09-01 33 views
1

所以我用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; } 
在我的测试情景

现在,调试语句(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 %} 

帮助是真的在这里感谢:-)

+0

嗯,我记得过滤器不'assign'标签的工作。而IIRC,'capture'值总是字符串。不知道这是否可行,但你可以尝试在if标签中使用内联过滤器:'{%if(forloop.index | modulo:plan.DateTypeChoice)== 0%}' –

+0

感谢您的评论。我只是尝试过,而且很奇怪,它总是(!)击中,不仅每5次左右。虽然在if条件下,我输出相同的计算结果,但它表明我不是0.非常奇怪的行为。另外,我尝试添加普通的旧的{{3 | modulo:2}}'作为模板中某处的液体文档被复制出来,但是代替'1',我得到了'3'。看起来这个过滤器没有被应用,所以解析器只使用第一个参数。我在google组中为dotliquid创建了一篇文章,希望有人能帮助。现在,我认为我必须重构我的模型。 – Dominik

回答

1

最后我找到了解决办法...

重新分析后,我发现从字面上没有过滤器在应用我的模板。也就是说,我找到了一个解决方案here

我使用

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

太多,所以改变modulo:Modulo大写中号后,都工作地很好.. 叹息