Django, truncatewords
metni 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:
{{ value|slice:"5" }}{% if value|length > 5 %}...{% endif %}
Güncelleme
1.4 sürümünden beri, Django bunun için yerleşik bir şablon etiketine sahiptir :
{{ value|truncatechars:9 }}
truncatechars
Filtre varsayılan bir elips karakter ekler.
(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
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)
İşte Django Belgelerinde, Yerleşik şablon etiketleri ve filtreleri: kesme kartları
Özel bir şablon filtresi yazmalısınız: http://docs.djangoproject.com/en/dev/howto/custom-template-tags/#writing-custom-template-filters
Nasıl truncatewords
inşa edildiğine bir göz atındjango.utils.text
Hedefinize benzer bir kodla ulaşabilirsiniz:
{{ value_of_text|truncatechars:NUM_OF_CHARS_TO_TRUNCATE}}
NUM_OF_CHARS_TO_TRUNCATE
bırakılacak karakter sayısı nerede .
truncatechars
daha açık olduğu için tercih edilmelidir.
"Kes" filtresinin eklenmesi 4 yıllık bir özellik isteğiydi ama sonunda anladığım kadarıyla ana hatta indi https://code.djangoproject.com/ticket/5025 - bu yüzden bir sonraki sürümü beklemeliyiz veya kullanmalıyız gövde.