向Wagtail页面字段添加外部javascript代码段



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

其中一页(并且可能在时间上更多(是";通缉的帮助";页面,并使用来自第三方服务的外部javascript片段,该片段列出了当前的职位空缺,并链接到他们托管的应用程序。

由于向富文本编辑器添加<script>标记只需转义它并只显示文本值,所以我向页面模型添加了一个额外的extra_scripts = models.TextField(),并向内容面板添加了相应的FieldPanel('extra_scripts')。这允许用户粘贴一些任意的javascript片段。

如果我在带有{{page.extra_scripts}}的模板中包含此字段值,它只显示内容,不执行javascript。通过查看可用的wagtailcore_tags,我没有看到应该用来执行内容的过滤器,当它与{{}}标记一起使用时,我认为模板引擎会处理它,这样它就不会执行。

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

我知道我可以在没有<script>标记的情况下将字段更改为实际的javascript内容,但该代码段还包括一些基本的HTML元素,如果我只给最终用户一个字段来粘贴代码段的某些部分,他们就不会直观地知道他们需要手动编辑所提供的代码段。我希望最终用户能够复制/粘贴他们获得的片段,并使其工作,而无需理解其他任何内容。

这是Django模板语言自动转义行为的结果,可以通过添加|safe过滤器来覆盖:

{{ page.extra_scripts|safe }}

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

最新更新