Как добавить многоточие в шаблон Django, используя укороченные слова без пробела? - PullRequest
5 голосов
/ 03 ноября 2010

Фильтр усеченных слов вставляет пробел перед elipsis.Как в «Прекрасной праздничной книге рецептов ...»
против желаемого
«Прекрасной праздничной книге рецептов ...»

Есть ли простой способ получить этот фильтр?не поставить место там?Я мог бы позаботиться об этом в представлении довольно легко, но предпочел бы сделать это в шаблоне - в идеале без создания пользовательского фильтра.Любые предложения приветствуются.

Ответы [ 2 ]

6 голосов
/ 03 ноября 2010

В Djangosnippets и есть несколько шаблонных фильтров, этот выглядит довольно аккуратно :

# From http://djangosnippets.org/snippets/1259/

from django import template

register = template.Library()

@register.filter
def truncatesmart(value, limit=80):
    """
    Truncates a string after a given number of chars keeping whole words.

    Usage:
        {{ string|truncatesmart }}
        {{ string|truncatesmart:50 }}
    """

    try:
        limit = int(limit)
    # invalid literal for int()
    except ValueError:
        # Fail silently.
        return value

    # Make sure it's unicode
    value = unicode(value)

    # Return the string itself if length is smaller or equal to the limit
    if len(value) <= limit:
        return value

    # Cut the string
    value = value[:limit]

    # Break into words and remove the last
    words = value.split(' ')[:-1]

    # Join the words and return
    return ' '.join(words) + '...'
3 голосов
/ 30 июня 2011

Это также будет работать:

{{ value|truncatewords:3|slice:"-4" }}...

По сути, просто отрежьте последние 4 символа (эллипс плюс пробел), а затем добавьте его обратно без пробела!

Аккуратная вещьто есть, с помощью этого метода вы также можете завершить усечение чем угодно.

...