Это на самом деле характерно почти для всех языков шаблонов, и рассуждения исходят непосредственно из упрощенной обработки.Рассмотрим следующий пример ( это на самом деле GSP, используемый Grails, но идея та же ):
<g:each var="x" in="exes">
${x.y}
</g:each>
Способ, которым это обрабатывается, заключается в том, что сначала тег ( илив случае Velocity указана директива ).Поскольку сам тег / директива содержит инструкции для обработки тела тега, метки тега / директивы удаляются, и весь контент сразу после начальной метки и непосредственно перед конечной меткой используется в качестве цели для обработки.Это включает в себя все пробелы, потому что очистить вывод заранее было бы намного сложнее.
Это, конечно, не означает, что вы не можете сделать это, как указывает Эдд, или что это будет наиболееПрежде всего, разумный выбор дизайна, но иногда делать вещи проще, чем создавать красивую разметку - в конце концов, большинству, если не всем процессорам разметки, на самом деле все равно, если у вас <p>some\ncontent</p>
или <p>some\n\n\n\t\tcontent</p>
.