将外部 javascript 片段添加到 Wagtail 页面字段

Adding external javascript snippet to a Wagtail page field

我当前的 Wagtail 项目结构非常简单,一些通用页面只有一个正文 RichTextField。这些只是基本的 CMS 类型页面,编辑者将在富文本编辑器中编辑一些内容并发布。

其中一个页面(可能更及时)是“求助”页面,它使用来自第三方服务的外部 javascript 片段,该片段列出了当前职位空缺以及指向应用程序的链接由他们主持。

由于将 <script> 标记添加到富文本编辑器只是对其进行转义并仅显示文本值,因此我在页面模型中添加了一个额外的 extra_scripts = models.TextField() 以及相应的 FieldPanel('extra_scripts') 到内容面板。这允许用户粘贴一些任意 javascript 片段。

如果我在我的模板中使用 {{page.extra_scripts}} 包含此字段值,它只会显示内容而不执行 javascript。查看可用的 wagtailcore_tags 我没有看到我应该用来执行内容的过滤器,当它与 {{}} 标签一起使用时,我假设模板引擎处理它所以它不会' t 执行。

如何在模板中包含此字段以便执行 javascript?

我知道我可以将字段更改为不带 <script> 标记的实际 javascript 内容,但代码段还包含一些基本的 HTML 元素,以及最终用户如果我只给他们一个字段来粘贴片段的某些部分,他们不会凭直觉知道他们需要手动编辑提供的片段。我希望最终用户能够 copy/paste 他们获得的片段并使其正常工作,而无需他们了解任何其他内容。

这是 Django 模板语言 auto-escaping behaviour 的结果,可以通过添加 |safe 过滤器来覆盖:

{{ page.extra_scripts|safe }}

当然,只有当您的编辑用户完全受信任时,您才应该这样做,因为这将使他们能够 运行 任意代码(包括,例如,劫持超级用户的会话 cookie碰巧访问了该页面)。