Znacznik szablonu Django do obcinania tekstu


88

Django ma truncatewordstag szablonu, który wycina tekst przy podanej liczbie słów. Ale nie ma to jak truncatechary .

Jaki jest najlepszy sposób na wycięcie tekstu w szablonie przy podanym limicie długości znaków?

Odpowiedzi:




10

Zrobiłem własny filtr szablonu, który dodaje „...” na końcu (ostatniego słowa) (obciętego) ciągu:

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
Teraz jest to domyślnie django.
Pulkit Sharma

6

Jeśli wolisz stworzyć własny, niestandardowy tag szablonu, rozważ użycie w nim narzędzia Django util Truncator . Oto przykładowe użycie:

>>> 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 ...'

Następnie możesz umieścić go w tagu szablonu:

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)



1

Dzięki, ale to nie jest to, czego potrzebuję.
grigy

Jak to? Może być używany do krojenia strun.
Ignacio Vazquez-Abrams

Dokumentacja mówi, że to dla list. Nie dołącza też znaku „...” do obciętego tekstu.
grigy

1
Element „...” należy dodać tylko wtedy, gdy został obcięty.
grigy

2
To odpowiada na pytanie OP i będzie działać ze starszymi wersjami Django. Chociaż z nowszymi wersjami truncatecharspowinno być preferowane, ponieważ jest bardziej wyraźne.
prostokątny

1

Możesz osiągnąć swój cel za pomocą podobnego kodu:

{{ value_of_text|truncatechars:NUM_OF_CHARS_TO_TRUNCATE}}

gdzie NUM_OF_CHARS_TO_TRUNCATEjest liczba znaków do pozostawienia.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.