Jinja: фильтр усечения больше не может усекать с правой стороны

Созданный на 27 авг. 2019  ·  9Комментарии  ·  Источник: pallets/jinja

Перед коммитом #610 можно было сделать усечение справа, например, если кто-то хотел разделить название месяца на сокращенную (длиной 3 символа) и несокращенную форму, этого можно было бы достичь с помощью:

"November"|truncate(3, True, '')
"November"|reverse|truncate(-3, True, '')|reverse

Вышеприведенное выдаст «Nov» и «ember» из-за того, как работают строковые функции:

>>> s='123456789'
>>> s[:3]
'123'
>>> s[:-3]
'123456'
>>>

Я думаю, что эта фиксация удалила очень полезную функциональность, которая больше не достижима в текущей версии Jinja (из-за явного assert() , который требует предоставления положительной длины усечения. Я бы предложил удалить это утверждение, чтобы дать возможность обрезать строку с любого конца с помощью фильтра усечения.

Самый полезный комментарий

Попробуйте добавить круглые скобки: {{ (article.date|strftime('%B'))[:3] }}

Все 9 Комментарий

Ваш вариант использования - это не то, что 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 внутри.

Закрытие, поскольку я не думаю, что усечение слева когда-либо предназначалось. Если вам нужны определенные манипуляции со строками, напишите специальный фильтр, специально для данного примера.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги