Jinja: filter terpotong tidak dapat lagi terpotong di sisi kanan

Dibuat pada 27 Agu 2019  ·  9Komentar  ·  Sumber: pallets/jinja

Sebelum melakukan #610, dimungkinkan untuk melakukan pemotongan sisi kanan, misalnya jika seseorang ingin membagi nama bulan menjadi bentuk singkatan (panjang 3 karakter) dan non-disingkat, dapat dicapai dengan:

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

Di atas akan menghasilkan "Nov" dan "ember" karena cara kerja fungsi string:

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

Saya pikir komit menghapus fungsionalitas yang sangat berguna yang tidak lagi dapat dicapai dengan versi Jinja saat ini (karena assert() eksplisit yang memerlukan panjang pemotongan positif untuk disediakan. Saya akan menyarankan untuk menghapus pernyataan itu untuk memberikan kesempatan untuk memotong string di ujung mana pun menggunakan filter terpotong.

Komentar yang paling membantu

Coba tambahkan tanda kurung: {{ (article.date|strftime('%B'))[:3] }}

Semua 9 komentar

Usecase Anda bukan truncate yang dimaksudkan untuk itu untuk memotong string panjang (biasanya dengan "..." di akhir). Anda cukup menggunakan {{ 'November'[:3] }} untuk mendapatkan tiga karakter pertama di Jinja...

@ThiefMaster , saya sebenarnya ingin mendapatkan "ember" dari "November", "ober" dari "Oktober", dll. Bukan tiga karakter pertama. Namun, terima kasih atas tipnya. Saya menghargainya. Bagaimanapun, saya baru saja mengirimkan PR yang menyesuaikan logika untuk mempertahankan semua perubahan yang diperkenalkan tetapi juga memungkinkan untuk memotong untuk kedua sisi string :)

[3:] lalu?

@ThiefMaster , sepertinya petunjuk Anda hanya berfungsi dengan string literal. Saya menggunakan Pelican (generator situs web statis) dan kode Jinja2 saya adalah seperti berikut:

{{ article.date|strftime('%B')|truncate(3, True, '') }}

Tampaknya tidak mungkin menggunakan [:3] yang diusulkan dalam kasus ini, inilah mengapa saya mengandalkan truncate .

Coba tambahkan tanda kurung: {{ (article.date|strftime('%B'))[:3] }}

@ThiefMaster , Anda adalah seorang legenda! Ini bekerja dengan cara ini. Terima kasih. Namun, saya masih percaya bahwa PR #1053 saya meningkatkan fungsi dengan memperkenalkan abs() di sekitar parameter panjang. Namun, sekarang setelah Anda memberikan solusi, hidup saya bahagia lagi :)

Juga, mengenai tujuan fungsi truncate, tampaknya asumsi umum adalah bahwa hanya ada bahasa LTR, tetapi ini tidak benar. Ada bahasa RTL seperti Farsi, dll, di mana pemotongan harus dilakukan di ujung yang lain :)

Saya bukan ahli RTL, tapi saya cukup yakin itu masalah UI saja, stringnya masih LTR secara internal.

Menutup karena menurut saya pemotongan di sebelah kiri tidak pernah dimaksudkan. Jika Anda memerlukan manipulasi string tertentu, tulis filter tertentu, terutama untuk contoh yang diberikan.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat