แท็กเทมเพลต Django เพื่อตัดทอนข้อความ


91

Django มีtruncatewordsแท็กเทมเพลตซึ่งจะตัดข้อความตามจำนวนคำที่กำหนด แต่มีอะไรที่ชอบtruncatechars

วิธีใดที่ดีที่สุดในการตัดข้อความในเทมเพลตที่ขีดจำกัดความยาวถ่านที่กำหนด

คำตอบ:



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

อัปเดต

ตั้งแต่เวอร์ชัน 1.4 Django มีแท็กเทมเพลตในตัวสำหรับสิ่งนี้:

{{ value|truncatechars:9 }}

เนื่องจากฉันทำงานกับ Django รุ่นก่อน 1.4 นี่คือสิ่งที่ฉันต้องการ ขอบคุณ!
Trey Piepmeier

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
Pulkit Sharma

6

หากคุณต้องการสร้างแท็กเทมเพลตของคุณเองให้พิจารณาใช้ Django util Truncatorในนั้น ต่อไปนี้เป็นตัวอย่างการใช้งาน:

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

ขอบคุณ แต่นี่ไม่ใช่สิ่งที่ฉันต้องการ
grigy

ยังไง? สามารถใช้เพื่อตัดสตริง
Ignacio Vazquez-Abrams

เอกสารระบุว่าสำหรับรายการ นอกจากนี้ยังไม่ต่อท้าย "... " กับข้อความที่ถูกตัดทอน
grigy

1
ต้องเพิ่ม "... " ก็ต่อเมื่อมีการตัดทอน
grigy

2
สิ่งนี้ตอบคำถามของ OP และจะใช้ได้กับ Django เวอร์ชันเก่า แม้ว่าtruncatecharsควรเลือกเวอร์ชันที่ใหม่กว่าเนื่องจากมีความชัดเจนมากกว่า
สี่เหลี่ยมผืนผ้า

0

การเพิ่มตัวกรอง "ตัดทอน" เป็นคำขอคุณลักษณะเป็นเวลา 4 ปี แต่ในที่สุดก็ลงจอดในลำตัวเท่าที่ฉันเข้าใจhttps://code.djangoproject.com/ticket/5025 - ดังนั้นเราจึงต้องรอรุ่นถัดไปหรือใช้ กระโปรงหลังรถ.

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.