Добавление внешнего сниппета javascript в поле страницы Wagtail

Мой текущий проект Wagtail имеет очень простую структуру с некоторыми общими страницами, которые имеют только тело RichTextField. Это просто базовые страницы типа CMS, где редактор будет редактировать некоторое содержимое в редакторе текста и публиковать.

Одна из страниц (а со временем, возможно, и больше) является страницей "Требуется помощь" и использует внешний javascript сниппет от стороннего сервиса, который перечисляет текущие вакансии со ссылками на приложения, размещенные у них.

<<<Поскольку добавление тега

в редактор насыщенного текста просто экранирует его и отображает только текстовое значение, я добавил дополнительный <script> в модель страницы вместе с соответствующим extra_scripts = models.TextField() в панели содержимого. Это позволяет пользователю вставлять произвольные фрагменты javascript.FieldPanel('extra_scripts')

Если я включаю значение этого поля в свой шаблон с помощью {{page.extra_scripts}}, он просто отображает содержимое и не выполняет javascript. Просматривая доступные wagtailcore_tags, я не вижу фильтра, который я должен использовать для выполнения содержимого, и когда он используется с тегом {{}}, я предполагаю, что шаблонизатор обрабатывает его так, чтобы он не выполнялся.

Как я могу включить это поле в шаблон, чтобы javascript был выполнен?

Я знаю, что могу изменить поле так, чтобы в нем было только фактическое содержимое javascript без тега <script>, но сниппет также включает некоторые основные элементы HTML, и конечные пользователи не будут интуитивно понимать, что им нужно вручную редактировать предоставленный сниппет, если я дам им только поле для вставки определенных частей сниппета. Я хочу, чтобы конечный пользователь мог просто скопировать/вставить полученный сниппет и чтобы он работал без необходимости понимать что-то еще.

Это результат работы языка шаблонов Django auto-escaping behavior, и может быть отменено добавлением фильтра |safe:

{{ page.extra_scripts|safe }}

Конечно, вы должны делать это только в том случае, если пользователи вашей редакции полностью доверяют вам, поскольку это даст им возможность выполнять произвольный код (включая, например, перехват cookie сессии суперпользователя, который случайно посетит эту страницу)

Вернуться на верх