Liquid Markup空格遵循可选值

时间:2017-08-29 16:09:46

标签: liquid dotliquid

液体标记中是否存在标准方法,以适应您想要在值之后输出空格的情况,但仅当该值存在时才会出现?

例如,假设我有四个值:prefix,first,middle,last。每个人都有第一个和最后一个,但只有一些人有前缀和/或中间。

如果我只做{{prefix}} {{first}} {{middle}} {{last}},那么如果没有前缀或没有中间名,我最终会得到额外的空格。

Mr. John Mortimer Smith <-- looks fine  
 Mary  Jones <-- looks weird, extra space at beginning and in middle

当然,我可以做到

{% if prefix != "" %}{{prefix}} {% endif %}{{first}} {% if middle != "" %}{{middle}} {% endif %}{{last}}

这应该有效,但看起来很混乱。还有更好的方法吗?

谢谢!

我被问到一个例子。如果我去http://dotliquidmarkup.org/try-online 并输入

{% assign first = "Mary" %} {% assign last = "Smith" %}
{{ prefix }} {{first}} {{middle}} {{last}}

然后我得到

 Mary  Smith

(在Mary之前有一个空格,在Mary之后有两个空格,因为前缀和中间是空的)

但我想得到

Mary Smith

1 个答案:

答案 0 :(得分:1)

http://dotliquidmarkup.org/try-online<pre>标记中显示流体解析结果,以保留空格。 在标准html页面中不会出现这种情况,除precode标记外,多个空格只显示一个空格。

如果您真的想摆脱多个空格,可以使用normalize_whitespace过滤器。

whitespaces.md

---
title: Whitespaces
names:
  -
   prefix: m
   first: first
   middle: middle
   last: last
  -
   prefix: m
   first:
   middle: middle
   last: last
  -
   prefix:
   first: first
   middle:
   last: last
---
{% for p in page.names %}
{% capture fullName %}
  {{ p.prefix }} {{ p.first }}
  {{ p.middle }} {{ p.last }}
{% endcapture %}
<pre>|{{ fullName }}|</pre>
<pre>|{{ fullName | normalize_whitespace }}|</pre>
{% endfor %}

不再有双重空格或任何不必要的空格。