Django ma truncatewords
tag 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?
django
django-templates
grigy
źródło
źródło
{{ value|slice:"5" }}{% if value|length > 5 %}...{% endif %}
Aktualizacja
Od wersji 1.4, Django ma wbudowany tag szablonu do tego:
źródło
truncatechars
filtr dodaje elipsę charakter domyślnie.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
źródło
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)
źródło
Tutaj jest w dokumentacji Django, wbudowane tagi szablonów i filtry: truncatechars
źródło
Powinieneś napisać niestandardowy filtr szablonu: http://docs.djangoproject.com/en/dev/howto/custom-template-tags/#writing-custom-template-filters
Zobacz, jak
truncatewords
jest wbudowanydjango.utils.text
źródło
slice
źródło
truncatechars
powinno być preferowane, ponieważ jest bardziej wyraźne.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_TRUNCATE
jest liczba znaków do pozostawienia.źródło
Dodanie filtru „obciętego” było żądaniem funkcji przez 4 lata, ale ostatecznie wylądowało w bagażniku, o ile rozumiem https://code.djangoproject.com/ticket/5025 - więc musimy poczekać na następną wersję lub użycie bagażnik samochodowy.
źródło