如何强制插入wagtail Draftail编辑器中的外部URL在新选项卡上打开?

时间:2018-04-26 11:43:44

标签: django python-3.x wagtail richtext

基本上我需要将target="_blank"属性添加到wagtail Draftail richtext编辑器中插入的所有外部网址中:

external url

In [2]: wagtail.__version__
Out[2]: '2.0.1'

EDIT-1 这不是重复的 wagtail版本2使用完全不同的richtext编辑器。

建议的answer建议$('a[href^="http://"]').attr('target', '_blank'),它会将相应的属性添加到包含http://页面上的所有链接。这是非常不理想的解决方案,因为页面上可能有更多链接不需要这样的处理。显然必须有更充分的修复,特别是因为wagtail已经区分了编辑器UI上的InternalExternal链接(参见附图)。

EDIT-2

似乎在wagtail.core.rich_text.feature_registry.FeatureRegistry类中有一个方法,我最好的理解是为不同的URL类型分配不同的处理程序,但是我不知道这些处理程序是什么,它们是如何获得的叫或如何修改它们?

def register_link_type(self, link_type, handler):
    self.link_types[link_type] = handler

1 个答案:

答案 0 :(得分:3)

创建文件wagtail_hooks.py并添加以下行:

class NewWindowExternalLinkHandler(LinkHandler):
    identifier = 'external'

    @classmethod
    def expand_db_attributes(cls, attrs):
        href = attrs["href"]
        return '<a href="%s" target="_blank" rel="noopener noreferrer">' % escape(href)

@hooks.register('register_rich_text_features')
def register_rich_text_handlers(features):
    features.register_link_type(NewWindowExternalLinkHandler)