使用 Wagtail 在博客 Post 中显示字数

Display Word Count in Blog Post with Wagtail

我想知道如何在 Wagtail 中创建一个模板标签来计算整个博客 post 的字数。我环顾四周,看到了一些处理 python 的不同方法,但不太确定如何处理 wagtail,因为视图通常被抽象掉了。看起来查询也变得更加复杂,因为在许多情况下,wagtail 模板可能有多个部分(介绍、正文等),创建者可能想要计数。

我注意到还有 a nice package 在管理员中为您执行此操作,但我想在用户端显示它。

我猜这是一个非常简单的答案,但我仍然不熟悉在没有视图的情况下将新变量传递给 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