Django memiliki truncatewords
tag cetakan, yang memotong teks pada jumlah kata yang diberikan. Tapi tidak ada yang seperti truncatechars .
Apa cara terbaik untuk memotong teks dalam template pada batas panjang karakter tertentu?
Jawaban:
{{ value|slice:"5" }}{% if value|length > 5 %}...{% endif %}
Memperbarui
Sejak versi 1.4, Django mempunyai tag cetakan built-in untuk ini:
{{ value|truncatechars:9 }}
truncatechars
saringan menambahkan karakter elips secara default.
Saya membuat filter template saya sendiri, yang menambahkan "..." ke akhir (kata terakhir dari) string (terpotong) juga:
from django import template
register = template.Library()
@register.filter("truncate_chars")
def truncate_chars(value, max_length):
if len(value) > max_length:
truncd_val = value[:max_length]
if not len(value) == max_length+1 and value[max_length+1] != " ":
truncd_val = truncd_val[:truncd_val.rfind(" ")]
return truncd_val + "..."
return value
Jika Anda lebih suka membuat tag cetakan kustom Anda sendiri, pertimbangkan untuk menggunakan Django util Truncator di dalamnya. Berikut ini adalah contoh penggunaan:
>>> from django.utils.text import Truncator
>>> Truncator("Django template tag to truncate text")
<Truncator: <function <lambda> at 0x10ff81b18>>
>>>Truncator("Django template tag to truncate text").words(3)
u'Django template tag...'
Truncator("Django template tag to truncate text").words(1)
u'Django...'
Truncator("Django template tag to truncate text").chars(20)
u'Django template t...'
Truncator("Django template tag to truncate text").chars(10)
u'Django ...'
Kemudian Anda dapat memasukkannya ke dalam tag template:
from django import template
from django.utils.text import Truncator
register = template.Library()
@register.filter("custom_truncator")
def custom_truncator(value, max_len, trunc_chars=True):
truncator = Truncator(value)
return truncator.chars(max_len) if trunc_chars else truncator.words(max_len)
Ini dia dalam Dokumentasi Django, tag cetakan dan filter bawaan: truncatechars
Anda harus menulis filter template kustom: http://docs.djangoproject.com/en/dev/howto/custom-template-tags/#writing-custom-template-filters
Lihat bagaimana truncatewords
dibangundjango.utils.text
Anda dapat mencapai tujuan Anda dengan kode serupa:
{{ value_of_text|truncatechars:NUM_OF_CHARS_TO_TRUNCATE}}
di mana NUM_OF_CHARS_TO_TRUNCATE
jumlah karakter yang tersisa.
truncatechars
harus lebih disukai, karena lebih eksplisit.
Menambahkan filter "truncate" adalah permintaan fitur selama 4 tahun tetapi akhirnya masuk ke trunk, sejauh yang saya mengerti https://code.djangoproject.com/ticket/5025 - jadi kami harus menunggu rilis atau penggunaan berikutnya bagasi.