仅在变量字符串为空的情况下,才如何在Nunjucks变量之前去除前导空格?

时间:2019-10-02 00:01:58

标签: nunjucks

我想支持Nunjucks模板的构造,其中仅在变量为空时才删除变量前的空白。

一个简单的例子可以开始:

    Hello {{ firstname }}, how are you?

如果名字是“ Dave”,则显示为“ Hello Dave,你好吗?”。但是,如果未设置,它将显示为“你好,你好吗?”与额外的空间。

如何以通用方式(不带周围文本的先验知识)构造模板,以使得仅在变量字符串为空的情况下才在变量之前去除前导空格?

使用{{- firstname }}将始终删除前导空格(因此,如果变量不为空,则该行将不起作用,在上面的示例中将导致“ HelloDave” )。

在这种情况下(例如,更好的是@AikonMogwai在评论中建议的方法),类似于以下内容,但过于复杂并且依赖于周围文本的知识(例如,如果变量不是-空):

  Hello
   {%- if firstname %}
     {{- " " + firstname -}}
   {% else %}
     {{- "" -}}
   {% endif %},

以下是一个小提琴,它演示了上述示例:https://jsfiddle.net/davebeyer/3L5146jg/(单击“运行”,然后单击“渲染”。)

理想情况下,我想创建/使用自定义标签(例如{{=)或自定义过滤器(例如condlstrip(用于条件左条纹)),以便可以使用以下方式构造模板:

  {{= firstname }}

  {{ firstname | condlstrip }}

但是我不清楚如何创建自定义{{=标签,也不清楚诸如condlstrip之类的过滤器是否会影响标签外部的呈现。

关于“无需先行理解周围的文本”的要求,这特别意味着解决方案不应假定变量前面始终有空格。例如,它也可以在以下情况下工作(使用我的{{=标签),并且用户相当有信心设置了school和studentId,但是可能设置了firstname,也可能未设置firstname。 :

Hi {{= firstname }}, your user ID is {{= school }}-{{= studentId }} and you can reach your profile at http://{{= school }}.example.com/profiles/{{= studentId }}

产生:

Dave,您的用户ID为CentralValley-1234,您可以通过http://CentralValley.example.com/profiles/1234来访问您的个人资料

也就是说,如果我们的系统可以使用模式{{= variable_name }}为用户创建的模板中的插入变量(实际上使用的是图形化的更高级别的UI)产生合理的默认行为,那就太好了。

2 个答案:

答案 0 :(得分:1)

一个更简单的解决方案:

const arr = [
        {url: 'https://url.com/file1', md5: 'fbbbabcc19264ce7b376ce4c726b9b85'},
        {url: 'https://url.com/file2', md5: 'd920d140432b961f07695ec34bd2a8ad'},
        {url: 'https://url.com/file3', md5: 'fbbbabcc19264ce7b376ce4c726b9b85'},
        {url: 'https://url.com/file4', md5: 'bf80655dbe90123324f88a778efa39f7'},
        {url: 'https://url.com/file5', md5: 'fbbbabcc19264ce7b376ce4c726b9b85'}
];


const removeDuplicates = (myArr, prop) => {
    return myArr.filter((obj, pos, arr) => {
        return arr.map(mapObj => mapObj[prop]).indexOf(obj[prop]) === pos;
    });
}
const result = removeDuplicates(arr, 'md5');
console.log(result)

https://jsfiddle.net/pn8koeg3/

答案 1 :(得分:0)

/