使用 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
我想知道如何在 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