Scriban Template Engine Multi l oop Поддерживает - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь использовать Scriban Template Engine для поддержки нескольких l oop. Например,

string bodyTextSub = "{{ for service in services }} ServiceName: {{ service }} {{ end }}" +
                "{{ for subservice in subServiceList }} SubServiceName: {{ subservice }} {{ end }}";
List<string> subServiceList = new List<string>
            {
                "PingSubService",
                "UrlSubService"
            };
            Dictionary<string, List<string>> serviceDictionary = new Dictionary<string, List<string>>()
            {
                {"emailContent", subServiceList},
                {"mailContent", subServiceList}
            };

            var template2 = Template.Parse(bodyTextSub);
            var result2 = template2.Render(new { services = serviceDictionary });
            Console.WriteLine(result2.ToString());

Я получаю результат вроде

ServiceName: {key: emailContent, value: [PingSubService, UrlSubService]}

Я хочу, чтобы на основе ключа мы должны были oop в подуслугах, но этого не происходит. Может ли кто-нибудь мне в этом помочь?

Второй вопрос: поддерживает ли движок шаблонов Scriban вложенный цикл? Заранее спасибо

1 Ответ

0 голосов
/ 14 июля 2020

Scriban поддерживает вложенный цикл. Я обновил ваш код, чтобы показать, как вы это сделаете. Я обновил код и результаты по вашему запросу.

var bodyTextSub = @"{{ for service in services }} 
ServiceName: {{ service.key }} {{$counter = 1}}
SubServices: {{ for subService in service.value }}{{ `
  `; $counter + `. `; $counter = $counter + 1 ; }}{{ subService }}{{ end }}
{{ end }}";
var subServiceList = new List<string>
{
    "PingSubService",
    "UrlSubService"
};
var serviceDictionary = new Dictionary<string, List<string>>()
{
    {"emailContent", subServiceList},
    {"mailContent", subServiceList}
};

var template2 = Template.Parse(bodyTextSub);
var result2 = template2.Render(new {services = serviceDictionary});
Console.WriteLine(result2.ToString());

Это приведет к следующему результату:

ServiceName: emailContent 
SubServices: 
  1. PingSubService
  2. UrlSubService
 
ServiceName: mailContent 
SubServices: 
  1. PingSubService
  2. UrlSubService
...