如何在 django-ckeditor 中推送 protectedSource?

How to push a protectedSource in django-ckeditor?

我目前正在为网站使用 django-ckeditor,效果很好,但我需要一些文章内嵌广告 (google adsense)。保存寄存器后,代码被剥离,我不知道在哪里或如何设置 protectedSource 以允许标签。

我已成功允许脚本内容,但不是 google adsense 使用的 ins 标签。

<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-XXXXXXXXXXXX"
     data-ad-slot="XXXXXXXXXXX"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>

我目前在settings.py中的CKEDITOR_CONFIGS定义是这样的:

CKEDITOR_CONFIGS = {
    'custom': {
        'toolbar': 'Custom',
        'extraAllowedContent':'script ins',
        'removePlugins': 'stylesheetparser',
        #'protectedSource': ['/<ins class=\"adsbygoogle\"\>.*?<\/ins\>/g'],
        'toolbar_Custom': [
            {
                'items': [
                    'RemoveFormat', 'PasteFromWord',
                ]
            },
            {
                'items': [
                    'Styles', 'Format', 'Bold', 'Italic', 'Underline',
                ]
            },
            {
                'items': [
                    'NumberedList', 'BulletedList', '-', 'Outdent', 'Indent'
                ]
            },
            {'items': ['Blockquote', 'Outdent', 'Indent']},
            {'items': ['NumberedList', 'BulletedList']},
            {
                'items': [
                    'JustifyLeft', 'JustifyCenter',
                    'JustifyRight', 'JustifyBlock'
                ]
            },
            '/',
            {'items': ['Font', 'FontSize']},
            {'items': ['Source']},
            {'items': ['Link', 'Unlink']},
            {'items': ['Image', 'Flash', 'Table', 'HorizontalRule', 'Embed']},
            {'items': ['Smiley', 'SpecialChar', 'PageBreak', 'Iframe']}

        ],
        'extraPlugins': ','.join([
            'div',
            'autoembed',
            'embedsemantic',
        ]),
        'embed_provider': '//ckeditor.iframe.ly/api/oembed?url={url}&callback={callback}&api_key=abc123',
    },
    'default': {
        'toolbar': 'full',
        'removePlugins': 'stylesheetparser',
        'allowedContent': True,
    }
}

我终于解决了这个问题。我添加了以下代码行:

config.protectedSource.push( /<ins[\s|\S]+?<\/ins>/g );
config.protectedSource.push( /<ins class=\"adsbygoogle\"\>.*?<\/ins\>/g );

在文件夹 static/ckeditor/ckeditor/ 中的 config.js 文件中 它与 CKEDITOR_CONFIGS 定义无关,但与 ckeditor 内部配置有关。最终结果如下所示: