我对执行 JSON 转换感兴趣并研究使用 dotliquid。
为了避免输入 JSON 的 POCO 只是为了能够将其作为变量发送,我想发送反序列化的 JSON。根据我的理解,我们无法向 render 方法发送动态,并且 JObject 或 JArray 无法按预期工作。我尝试反序列化为 Dictionary<string, object>,但无法处理嵌套的 JSON 结构。
液体
[
{%- for p in data.names -%}
{
"name" : {{ p.name }}
} {%- unless forloop.Last == true -%},{% endunless %}
{%- endfor -%}
]
Run Code Online (Sandbox Code Playgroud)
C# 代码
Template template = Template.Parse(File.ReadAllText("Maps/account.liquid"));
var json = JsonConvert.DeserializeObject<Dictionary<string, object>>(
@"{ ""names"":[{""name"": ""John""},{""name"":""Doe""}] }");
var jsonHash = Hash.FromAnonymousObject(new { Data = json});
Run Code Online (Sandbox Code Playgroud)
输出
[
{
"name" :
},
{
"name" :
} …
Run Code Online (Sandbox Code Playgroud) 我在从具有合法反斜杠( ) 的azure web api 发送数据时遇到麻烦\
。数据字段user id
具有以下模式:
Domain\UserId
我想将其按原样存储在数据库中。但点液体不处理它。我尝试使用 escape、escape_once 和 Replace
{{ body.requestor | escape_once }}
{{ body.requestor | escape }}
{{ body.requestor | replace "\", "\\"}}
Run Code Online (Sandbox Code Playgroud)
但它们都不起作用。我无法要求我的 Web api 的调用者传递带有user id
两个反斜杠的 - \\
。我必须更改我的 Web api 以接受用户 ID 的原样。任何输入/指针表示赞赏。
我正在使用DotLiquid模板引擎并尝试在模板中访问字典值.我已经传递给模板这个drop:
public class SomeDrop : Drop
{
public Dictionary<string, object> MyDictionary {get; set;}
}
var someDropInstance = SomeDrop
{
MyDictionary = new Dictionary<string, object> {{"myKey", 1}}
}
Template.NamingConvention = new CSharpNamingConvention();
var preparedTemplate = Template.Parse(template);
var templateOutput = preparedTemplate.Render(Hash.FromAnonymousObject(new { @this = someDropInstance }));
Run Code Online (Sandbox Code Playgroud)
在模板我不能访问的myKey值
{{ this.MyDictionary.myKey }}
既不
{{ this.MyDictionary['myKey'] }}
我正在尝试检查我当前页面是否是某个集合中的集合页面而不是单个产品页面.
我的意思是,例如,如果有人去鞋子的收集页面然后我可以检查使用collection.handle =='鞋子',但如果我从该页面选择一个产品,那么它仍然会给我真实但我希望我的条件成真如果是收藏页面.谢谢你的帮助!
我有一个包含日期字段的液体模板,我根本没有使用任何过滤器,但它正在从2020-04-11T22:02:11Z
UTC 转换为4/11/2020 10:02:11 PM
. 这是 DotLiquid 或 Azure 逻辑应用的预期行为吗?我怎样才能阻止它这样做?
假设我有以下模板:
嗨{{名字}}!欢迎回到{{博客}}。上次登录日期:{{ date }}。
允许用户输入模板和占位符/变量,因此我无法知道占位符会是什么样子。
我正在考虑创建这样的东西:
public string Render(string text, Dictionary<string,string> placeholders)
{
Template template = Template.Parse(text);
return template.Render(Hash.FromSomething(placeholders));
}
Run Code Online (Sandbox Code Playgroud)
有一种名为 FromDictionary 的方法,它接受字典,但我不太明白它是如何工作的。另一种选择是 FromAnonymousObject,但我不知道如何将 Dictionary 转换为匿名对象以适应目的。
任何想法将不胜感激!
我正在 for 循环中提取元数据值,并且需要将它们显示在逗号分隔的列表中。
代码(为了可读性添加了空格):
{% if asset.metadata['field01'] %}{{asset.metadata['field01']}}{% endif %}
{% if asset.metadata['field02'] %}{{asset.metadata['field02']}}{% endif %}
{% if asset.metadata['field03'] %}{{asset.metadata['field03']}}{% endif %}
Run Code Online (Sandbox Code Playgroud)
目前这显示为:Field 01 ValueField 02 ValueField 03 Value
,但我希望它显示为Field 01 Value, Field 02 Value, Field 03 Value
在每个 if 语句后手动键入,,
会在最后一个值后留下一个逗号。
我有ASP.NET Core 2.2
我试图安装dotliquid使用的NuGet
Install-Package DotLiquid -Version 2.0.298
但出现错误
DotLiquid是否支持.NET Core 2.2?
我在我的ASP.NET 4.0 Webforms应用程序中使用DotLiquid作为一些电子邮件模板,并且我试图排除我的一个电子邮件模板的某个部分,如果数据对象中的给定字符串我绑定到模板为空或空.
检查NULL非常有效:
{% if MyString != null %}
Some fancy label: {{ MyString }}
{% endif %}";
Run Code Online (Sandbox Code Playgroud)
但是,无论我试图在此测试中包含空字符串到目前为止都失败了:
{% if MyString != null or MyString == empty %}
{% if MyString != null or MyString == '' %}
Run Code Online (Sandbox Code Playgroud)
如何检查"如果此字符串为空或空"?
我在许多项目中使用angular,特别是在ASP.NET MVC中,但我不喜欢angular-
我喜欢的角度只是指令,当我做大嵌套指令时,我使用相同的控制器foreach,所以没有$scope
交互(较少的观察者)
.controller('BaseGridCtrl', function(){
//instead of
//$scope.value = 123;
var ctrl = this;
//this is for Table-base-directive
ctrl.value = 123;
//this is for Table-head-directive
ctrl.value2 = 123;
});
.directive('table-base', function(){
return {
template: '<div>{{bgc.value}}</div>',
controller: 'BaseGridCtrl',
controllerAs: 'bgc'
}
});
.directive('table-head', function(){
return {
template: '<div>{{bgc.value2}}</div>',
controller: 'BaseGridCtrl',
controllerAs: 'bgc'
}
});
.directive('table-foot', function(){
return {
template: '<div>{{bgc.value3}}</div>',
controllerAs: 'bgc',
controller: function(){
var ctrl = this;
ctrl.value3 = …
Run Code Online (Sandbox Code Playgroud) 使用DotLiquid库,这是关于Liquid安全性的问题。
假设我的视图模型如下(伪代码):
class MyViewModel
public string MyField
public string MyMethod()
Run Code Online (Sandbox Code Playgroud)
...,然后将MyViewModel对象传递给Liquid模板,其中将MyField设置为可从模板内部访问(以便模板可以读取其内容)。
我的假设是答案不是所有问题,但我想确定。
谢谢。
dotliquid ×11
liquid ×4
c# ×3
shopify ×2
.net ×1
angularjs ×1
asp.net ×1
asp.net-core ×1
asp.net-mvc ×1
backslash ×1
dictionary ×1
json ×1
json.net ×1
nuget ×1
reactjs ×1