Добавление внешнего сниппета 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 сессии суперпользователя, который случайно посетит эту страницу)