Dotliquid Template Render输出文件路径

时间:2017-06-26 11:33:37

标签: c# dotliquid

我目前正在尝试使用C#中的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,这意味着我无法正确加载我的模板。看Try to use DotLiquid with c# 我原以为我正在加载模板并使用File.ReadAllText(templatePath));向我显示templatePath指向正确的文件。

这告诉我,我不理解Template.Parse()Template.Render()的基本内容,其中源代码没有为我提供我所缺少的洞察力,所以希望你能提供帮助我出去了。

2 个答案:

答案 0 :(得分:1)

如果没有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

的内容

答案 1 :(得分:1)

希望拯救他人免于被绊倒。输出是文件路径的真正原因是 Template.Parse(字符串源代码)需要实际模板内容,而不是文件路径。

为了完成您的尝试,您需要以这种方式使用它:

Template template = Template.Parse(File.ReadAllText(templatePath));