gpt4 book ai didi

c# - 在 DotLiquid 中访问自己标记中的当前范围

转载 作者:行者123 更新时间:2023-11-30 21:03:37 25 4
gpt4 key购买 nike

当我在 DotLiquid 模板中循环遍历 IEnumerable 时

{% for block in Blocks -%}

// this works
{{ block.Structure }}

// this doesn't
{% RenderObject block.Structure %}

{% endfor -%}

我可以通过 block.Structure 直接渲染一个成员,但是我不知道如何在我自己的标签类 RenderObject 中访问这个 Structure 对象:

public class RenderObject : Tag
{
private string _tagName;
private string _markup;

public override void Initialize(string tagName, string markup, List<string> tokens)
{
_tagName = tagName;
_markup = markup.Trim();
base.Initialize(tagName, markup, tokens);
}

public override void Render(Context context, TextWriter result)
{
// HERE COMES THE QUESTION
// How to access the block.Structure object here?
var structure = ?

最佳答案

您可以使用传递给 RenderObject.Render 方法的 context 对象。 Context 上有一个索引器,可将变量名解析为变量。 (并且 For 标记将循环变量(即您示例中的 block)放入 context 中。)

剩下的问题是获取变量名(“block.Structure”)。幸运的是,这正是传递给 RenderObject.Initializemarkup 变量的用途。

所以这应该有效:

public class RenderObject : Tag
{
private string _tagName;
private string _markup;

public override void Initialize(string tagName, string markup, List<string> tokens)
{
_tagName = tagName;
_markup = markup.Trim();
base.Initialize(tagName, markup, tokens);
}

public override void Render(Context context, TextWriter result)
{
var structure = context[_markup];
}
}

关于c# - 在 DotLiquid 中访问自己标记中的当前范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12739573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com