Tag cetakan Django untuk memotong teks


91

Django memiliki truncatewordstag 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:



62
{{ value|slice:"5" }}{% if value|length > 5 %}...{% endif %}

Memperbarui

Sejak versi 1.4, Django mempunyai tag cetakan built-in untuk ini:

{{ value|truncatechars:9 }}

Karena saya bekerja dengan pra-1.4 Django, inilah yang saya butuhkan. Terima kasih!
Trey Piepmeier

1
yang truncatecharssaringan menambahkan karakter elips secara default.
cnfw

11

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

2
Defaultnya sekarang adalah django.
Pulkit Sharma

6

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)



2

Anda dapat mencapai tujuan Anda dengan kode serupa:

{{ value_of_text|truncatechars:NUM_OF_CHARS_TO_TRUNCATE}}

di mana NUM_OF_CHARS_TO_TRUNCATEjumlah karakter yang tersisa.


1

Terima kasih, tapi ini bukan yang saya butuhkan.
grigy

Bagaimana? Ini dapat digunakan untuk memotong string.
Ignacio Vazquez-Abrams

Dokumentasi mengatakan itu untuk daftar. Juga tidak menambahkan "..." ke teks yang terpotong.
grigy

1
"..." perlu ditambahkan hanya jika terpotong.
grigy

2
Ini menjawab pertanyaan OP, dan ini akan bekerja dengan versi Django yang lebih lama. Padahal dengan versi yang lebih baru truncatecharsharus lebih disukai, karena lebih eksplisit.
persegi panjang

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.