Dotliquid Template Render выводит путь к файлу

В настоящее время я пытаюсь работать с DotLiquid на С# и заметил поведение, которое не совсем понимаю. Поскольку я не очень хорошо знаком с C#, я не могу точно сказать, связана ли моя проблема с самим C# или с DotLiquid, поэтому, пожалуйста, потерпите меня. знак равно

У меня есть очень простой index.liquid, которому я пытаюсь передать объект Table. Для начала я переопределил toString(), чтобы просто создать представление, а сейчас я позже захочу работать с реальным объектом. При попытке работать с шаблоном я делаю следующее:

public static void createHTML(DataTable table)
{
    string templatePath = @"C:\Path\To\index.liquid";
    var template = Template.Parse(templatePath);
    template.Render(Hash.FromAnonymousObject(new
    {
        table = DataMapper.createTable(table).toString()
    });

    using (StreamWrite file = new StreamWriter(@"C:\Some\Path\test.html"))
    {
        file.write(template.Render());
    }
}

Теперь, когда я открываю этот только что созданный test.html, все, что в нем содержится, это C:\Path\To\index.liquid, что означает, что я каким-то образом неправильно загружаю свой шаблон. Глядя на Попробуйте использовать DotLiquid с С#, я бы подумал, что я Я правильно загружаю шаблон, и использование File.ReadAllText(templatePath)); показало мне, что templatePath указывает на правильный файл.

Это показывает мне, что я не понимаю что-то очень простое в Template.Parse() или Template.Render(), где исходный код не дает мне понимания, которого мне не хватает, поэтому, надеюсь, вы сможете мне помочь.


person Isocortex    schedule 26.06.2017    source источник


Ответы (2)


Надеюсь, спас других от того, чтобы споткнуться на этом. Настоящая причина, по которой выводом является путь к файлу, заключается в том, что Template.Parse(string source) ожидает фактическое содержимое шаблона, а не путь к файлу.

Чтобы выполнить то, что вы пытаетесь, вам нужно использовать его следующим образом:

Template template = Template.Parse(File.ReadAllText(templatePath));
person BinaryBurnie    schedule 20.04.2018

Без содержимого index.liquid сложно сказать, но тут уже есть один момент: вы вызываете Render два раза, а второй без вашего объекта.

Попробуй это:

public static void createHTML(DataTable table)
{
    string templatePath = @"C:\Path\To\index.liquid";
    var template = Template.Parse(templatePath);

    using (StreamWrite file = new StreamWriter(@"C:\Some\Path\test.html"))
    {
        file.write(template.Render(Hash.FromAnonymousObject(new
        {
            table = DataMapper.createTable(table).toString()
        })));
    }
}

Если это не сработает, обновите свой вопрос, добавив содержание index.liquid.

person Jérémie Bertrand    schedule 29.06.2017