I knowまでは、DotLiquid(バージョン1.8.0.0を使用)はC#Dictionary
のコンストラクトをサポートしていません。 Drop
-Objectにラップする必要があります。DotLiquid:テンプレート内のfor-loop内の(ラップされた)ディクショナリ<string、string>をループする
私はユースケースのためにティムジョーンズの答えを適応しようとしました。悲しいことに、これは期待どおりに動作していないので、誰かが私がここで間違っているところを見せてくれることを願っています。
これは、辞書を含む私のラップモデルクラス(の1つ)です:
public class LegendAdditive : Drop
{
public LegendAdditive()
{
AdditiveDict = new Dictionary<string, string>();
}
public Dictionary<string, string> AdditiveDict { get; set; }
}
クラス自体は、他のいくつかの値を含むLegendModel
に埋め込まれている:あなたが見ることができるように
public class LegendModel: Drop
{
...
public LegendAdditive Additives { get; set; }
...
}
を、すべてのクラスは、Drop
にラップされています。これは、私が知っているように、ディクショナリ(ILiquidizableの実装など)を使用するための前提条件です。最後に
public static string ConvertTemplate(ITemplateFileFactory templateFilePathFactory IDropModelConverter modelConverter, MyObject mplan)
{
//reading my filepath out of the factory here...
DotLiquid.Template.NamingConvention = new DotLiquid.NamingConventions.CSharpNamingConvention();
Template templateObj = Template.Parse(template); // Parses and compiles the template
Drop plan = modelConverter.GetModel(mplan);
Hash hashedValues = Hash.FromAnonymousObject(new { plan });
string ret = templateObj.Render(hashedValues);
return ret;
}
とIn:テンプレートを解析し、
public DotLiquid.Drop GetModel(MyObject plan)
{
...
var LegendAdditives = new LegendAdditive();
//dbLegend.Additives is a Dictionary<string, string> itself.
if (dbLegend.Additives.Any())
foreach (var additive in dbLegend.Additives.OrderBy(a => a.Key))
LegendAdditives.AdditiveDict.Add(additive.Key, additive.Value);
...
LegendModel model = new LegendModel
{
...
Additives = LegendAdditives,
...
};
return model;
}
をし、クラスConvertToPdf
に、私はこのようなConvertTemplate
方法があります。
、このモデルは次のように満たされています私のTemplatefile、私はこの辞書の値を得ようとします:
<div>
<dl>
{% for add in plan.Additives.AdditiveDict %}
<dt>{{add.Key}}</dt>
<dd>{{add.Value}}</dd>
{% endfor %}
</dl>
</div>
は今、ファイルが正しく解析しているが、私は私のループでDictionaryvaluesにアクセスしようとすると、私は今のために得るすべては、この出力されます:
Liquid syntax error: Object '[18, Stärke]' is
invalid because it is neither a built-in type
nor implements ILiquidizable
今では私が実際にが私のテンプレートで正しい値を取得するようです.Parseメソッド。私は彼らを私の構造から外しているわけではないから... ...?どんな助けもありがとうございます。正直言って、私はここで根本的に何かが欠けていると思う。