我想知道如何创建一个模板标签来获取 Wagtail 中整个博客文章的字数。我环顾四周,看到了一些使用 python 的不同方法,但不太确定如何使用 wagtail 来做,因为视图经常被抽象掉。考虑到在许多情况下,创建者可能想要计算 wagtail 模板(介绍、正文等)的多个部分,因此查询似乎也变得更加复杂。
我注意到在管理员中还有一个很好的包可以为您执行此操作,但我想在用户端显示它。
我猜这是一个非常简单的答案,但我仍然不熟悉在没有视图的情况下将新变量传递给 Wagtail 中的模板。
谢谢!
模板标签在这里不是最好的方法——模板与页面的呈现有关,但字数是页面数据的一个有意义的属性,它独立于任何特定的呈现。我建议word_count
改为在您的页面模型上定义为方法 - 然后它始终可以作为page.word_count()
或{{ page.word_count }}
在模板中使用。这是它如何工作的一个例子(使用该str.split
方法,它在空格上分割,作为获取字数的一种廉价而愉快的方式):
class BlogPage(Page):
intro = RichTextField()
body = StreamField([
('heading', blocks.CharBlock()),
('paragraph', blocks.RichTextBlock()),
('image', ImageChooserBlock()),
])
def word_count(self):
count = len(self.intro.split())
for block in self.body:
if block.block_type == 'paragraph':
count += len(str(block.value).split())
return count
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句