Metni kesmek için Django şablon etiketi


91

Django, truncatewordsmetni verilen kelime sayısında kesen şablon etiketine sahiptir . Ama kesik arabalar gibisi yoktur .

Şablondaki metni belirli karakter uzunluğu sınırında kesmenin en iyi yolu nedir?

Yanıtlar:




11

(Kesilmiş) dizenin sonuna (son kelimesi) "..." ekleyen kendi şablon filtremi yaptım:

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
Şimdi varsayılanı django.
Pulkit Sharma

6

Kendi özel şablon etiketinizi oluşturmayı tercih ediyorsanız, içinde Django Truncator'u kullanmayı düşünün . Aşağıdaki örnek bir kullanımdır:

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

Daha sonra bunu bir şablon etiketine koyabilirsiniz:

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

Hedefinize benzer bir kodla ulaşabilirsiniz:

{{ value_of_text|truncatechars:NUM_OF_CHARS_TO_TRUNCATE}}

NUM_OF_CHARS_TO_TRUNCATEbırakılacak karakter sayısı nerede .


1

Teşekkürler, ama ihtiyacım olan bu değil.
grigy

Nasıl yani? Dizeleri dilimlemek için kullanılabilir.
Ignacio Vazquez-Abrams

Belgeler, listeler için olduğunu söylüyor. Ayrıca kesilmiş metne "..." eklemez.
grigy

1
"..." yalnızca kısaltılmışsa eklenmelidir.
grigy

2
Bu, OP'nin sorusunu yanıtlar ve bu, Django'nun eski sürümlerinde çalışacaktır. Daha yeni sürümlerde truncatecharsdaha açık olduğu için tercih edilmelidir.
dikdörtgen

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.