液体标记 space 跟随可选值

Liquid Markup space following optional value

Liquid Markup 中是否有一种标准方法来处理您想要在某个值后输出 space,但前提是该值存在的情况?

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

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

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 之前有一个 space,在 Mary 之后有两个 space,因为前缀和中间为空)

但我想得到

Mary Smith

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 %}

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