在 Django 中,如何从模型中检索子字符串直到出现点,以显示在模板中

In Django how to retrieve substring till ocurrence of a dot, from a model, to show in a template

我有以下型号:

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

Django 有一组有限的 builtin template filters 并且没有 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)

另请注意,多个模型名称可能会造成混淆:它是否是每个条目中的新闻数组?

尽管如此,您可以创建 custom template tags and filters(在许多情况下您应该这样做)来解决您的问题。