在Wigtail博客文章中显示字数

时间:2017-03-03 18:16:27

标签: python django wagtail

我想知道如何创建一个模板标签,它将获得Wagtail中整个博客文章的单词计数。我已经环顾四周,看到了一些与python有关的不同方法,但不太确定如何使用wagtail这样做,因为视图经常被抽象掉。似乎查询也变得更加复杂,因为在许多情况下,创建者可能想要计算的wagtail模板(intro,body等)可能有多个部分。

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

我猜这是一个非常简单的答案,但我仍然不熟悉在没有视图的情况下将新变量传递给Wagtail中的模板。

谢谢!

1 个答案:

答案 0 :(得分:0)

模板标签不是最好的方法 - 模板与页面的显示有关,但字数是页面数据的一个有意义的属性,它独立于任何特定的表示。我建议将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