В Django как получить подстроку до появления точки из модели, чтобы показать в шаблоне

У меня следующая модель:

class News(models.Model):
    news_text = models.TextField(null=True)
    ... # other fields

со следующим представлением:

def news(r):
    news= News.objects
    values = {'news':news}
    return render(r,'webapp1/news.html',values)

Я хочу показать в шаблоне подстроку для колонки news_text, до первого появления 'dot', как:

{{news.news_text| split('.')[0] }}

Попробовал это в шаблоне, но получил: "invalid filter: 'split'".

Первый пост на stackoverflow ;)

Django имеет ограниченный набор встроенных фильтров шаблонов и нет ни одного split фильтра.

Также в шаблонах Django вы можете получить доступ к атрибутам или методам объекта, например {{my_dict.keys}}, но вы не можете передать никаких аргументов. Поэтому вы не можете делать такие вещи, как {{news.news_text.split('.')}}, а также

Все это сделано с намерением заставить вас отделить логику от шаблонов. Так что для вашего примера, вероятно, будет лучше определить специальную контекстную переменную и передать ее в контекст рендеринга шаблона, например:

def news(r):
    news = News.objects.all().get()  # don't forget to call some filters on object manager
    context = {
        'news': news,
        'headlines': news.news_text.split('.')[0],
    }
    return render(r, 'webapp1/news.html', context)

Также обратите внимание, что множественные имена моделей могут запутать: это массив новостей в каждой записи, или нет?

Тем не менее, вы можете создать пользовательские шаблонные теги и фильтры (и во многих случаях вы должны это сделать) для решения вашей проблемы.

Вернуться на верх