В 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)
Также обратите внимание, что множественные имена моделей могут запутать: это массив новостей в каждой записи, или нет?
Тем не менее, вы можете создать пользовательские шаблонные теги и фильтры (и во многих случаях вы должны это сделать) для решения вашей проблемы.