Перед коммитом #610 можно было сделать усечение справа, например, если кто-то хотел разделить название месяца на сокращенную (длиной 3 символа) и несокращенную форму, этого можно было бы достичь с помощью:
"November"|truncate(3, True, '')
"November"|reverse|truncate(-3, True, '')|reverse
Вышеприведенное выдаст «Nov» и «ember» из-за того, как работают строковые функции:
>>> s='123456789'
>>> s[:3]
'123'
>>> s[:-3]
'123456'
>>>
Я думаю, что эта фиксация удалила очень полезную функциональность, которая больше не достижима в текущей версии Jinja (из-за явного assert()
, который требует предоставления положительной длины усечения. Я бы предложил удалить это утверждение, чтобы дать возможность обрезать строку с любого конца с помощью фильтра усечения.
Ваш вариант использования - это не то, что truncate
предназначено для усечения длинных строк (обычно с "..." в конце). Вы можете просто использовать {{ 'November'[:3] }}
, чтобы получить первые три символа в Jinja...
@ThiefMaster , я действительно хочу получить «эмбер» из «ноябрь», «обер» из «октябрь» и т. д. Не первые три символа. Тем не менее, спасибо за подсказку. Я признателен за это. В любом случае, я только что представил PR, который корректирует логику, чтобы сохранить все внесенные изменения, но также позволяет усекать обе стороны строки :)
[3:]
тогда?
@ThiefMaster , похоже, ваша подсказка работает только с буквальными строками. Я использую Pelican (генератор статических веб-сайтов), и мой код Jinja2 выглядит примерно так:
{{ article.date|strftime('%B')|truncate(3, True, '') }}
Кажется, что использовать предложенный [:3]
в данном случае невозможно, поэтому я полагался на truncate
.
Попробуйте добавить круглые скобки: {{ (article.date|strftime('%B'))[:3] }}
@ThiefMaster , ты легенда! Это работает следующим образом. Спасибо. Тем не менее, я по-прежнему считаю, что мой PR #1053 улучшает функцию, вводя abs()
вокруг параметра длины. Однако теперь, когда вы предоставили обходной путь, моя жизнь снова стала счастливой :)
Кроме того, что касается назначения функции усечения, кажется, что распространено предположение, что существуют только языки LTR, но это не так. Существуют языки RTL, такие как фарси и т. д., где усечение должно выполняться на другом конце :)
Я не эксперт по RTL, но я вполне уверен, что это касается только пользовательского интерфейса, строка по-прежнему LTR внутри.
Закрытие, поскольку я не думаю, что усечение слева когда-либо предназначалось. Если вам нужны определенные манипуляции со строками, напишите специальный фильтр, специально для данного примера.
Самый полезный комментарий
Попробуйте добавить круглые скобки:
{{ (article.date|strftime('%B'))[:3] }}