2015-09-01 5 views
1

Поэтому я использую dotLiquid (1.8.0) в моем проекте для создания некоторых HTML-шаблоны, которые используются для создания PDF-файлов с помощью EO.pdfdotLiquid: по модулю расчета не работает, как ожидалось

Так в основном, я хочу проверьте, соответствуют ли заданные даты массива 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-модели, как

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).

Я надеюсь, что кто-то может помочь мне здесь. Возможно, я использую modulo неправильно? Как я знаю, forloop.index - это числовое значение, а числовые значения, заданные шаблону из модели, также рассматриваются как числовые значения парсером, поэтому я не в идеях.

Edit:

на основе 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

Спасибо за ваш комментарий. Я просто попробовал, и странно, как есть, это всегда (!) попадали не только каждый пятый раз или около того. хотя в условии if, я выводю тот же расчет, и он показывает, что это НЕ 0. очень странное поведение. Кроме того, я попытался добавить просто старый старый {{3 | modulo: 2}} 'как скопированный из документов-документов где-то в моем шаблоне, но вместо' 1' я получаю '3'. Кажется, что фильтр просто не применяется, и поэтому парсер использует только первый аргумент. Я создал сообщение в группе google для dotliquid и надеюсь, что кто-то там может помочь. На данный момент, я думаю, мне нужно реорганизовать мою модель. – Dominik

ответ

1

Наконец я нашел решение ...

После повторного анализа, я узнал, что буквально не фильтр не применяется в мои шаблоны. Тем не менее, я нашел решение правильно here.

Я использую

Template.NamingConvention = новый DotLiquid.NamingConventions.CSharpNamingConvention();

тоже, так что после изменения modulo:Modulo к с капиталом M, все работает нормально .. Вздох

 Смежные вопросы

  • Нет связанных вопросов^_^