我目前正在尝试使用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()
的基本内容,其中源代码没有为我提供我所缺少的洞察力,所以希望你能提供帮助我出去了。
答案 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));