पाठ को छोटा करने के लिए Django टेम्प्लेट टैग


91

Django में truncatewordsटेम्प्लेट टैग है, जो दिए गए शब्द गणना पर पाठ को काटता है। लेकिन वहाँ की तरह कुछ भी नहीं है truncatechars

दिए गए चार्ट की लंबाई सीमा पर पाठ को काटने का सबसे अच्छा तरीका क्या है?

जवाबों:



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

अपडेट करें

संस्करण 1.4 के बाद से, Django के पास इसके लिए एक अंतर्निहित टेम्पलेट टैग है:

{{ value|truncatechars:9 }}

चूँकि मैं प्री -१.४ Django के साथ काम कर रहा हूँ, यह ठीक वही है जो मुझे चाहिए था। धन्यवाद!
ट्रे पाइपीमेयर

1
truncatecharsफिल्टर डिफ़ॉल्ट रूप से एक अंडाकार चरित्र कहते हैं।
cnfw

11

मैंने अपना स्वयं का टेम्प्लेट फ़िल्टर बनाया, जो "... (अंतिम शब्द) के अंत में (छोटा) स्ट्रिंग जोड़ देता है:

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
इसका डिफ़ॉल्ट अब यह django है।
पुलकित शर्मा

6

यदि आप अपना स्वयं का कस्टम टेम्प्लेट बनाना पसंद करते हैं, तो इसमें Django उपयोग ट्रंकेटर का उपयोग करने पर विचार करें । निम्नलिखित एक नमूना उपयोग है:

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

फिर आप इसे टेम्प्लेट टैग में डाल सकते हैं:

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

आप समान कोड के साथ अपना लक्ष्य प्राप्त कर सकते हैं:

{{ value_of_text|truncatechars:NUM_OF_CHARS_TO_TRUNCATE}}

जहां NUM_OF_CHARS_TO_TRUNCATEछोड़ने के लिए वर्णों की संख्या है।


1

धन्यवाद, लेकिन यह वह नहीं है जो मुझे चाहिए।
ग्रिगी

ऐसा कैसे? यह तार को टुकड़ा करने के लिए इस्तेमाल किया जा सकता है।
इग्नासियो वाज़क्वेज़-अब्राम्स

प्रलेखन का कहना है कि यह सूचियों के लिए है। इसके अलावा यह "..." पाठ को छोटा करने के लिए नहीं करता है।
ग्रिजी

1
"..." को केवल तभी जोड़ना होगा जब वह छोटा हो गया हो।
ग्रिगि

2
यह ओपी के सवाल का जवाब देता है, और यह Django के पुराने संस्करणों के साथ काम करेगा। हालांकि नए संस्करणों के साथ truncatecharsपसंद किया जाना चाहिए, क्योंकि यह अधिक स्पष्ट है।
आयतांकटंगल

0

"ट्रंकट" फ़िल्टर जोड़ना 4 वर्षों के लिए एक फीचर अनुरोध था, लेकिन अंत में ट्रंक में उतरा, जहां तक ​​मैं समझता हूं कि https://code.djangoproject.com/ticket/5025 - इसलिए हमें अगली रिलीज़ की प्रतीक्षा करनी होगी या उपयोग करना होगा सूँ ढ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.