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

Django 如何强制在wagtail Draftail编辑器中插入的外部URL在新选项卡上打开?,django,python-3.x,wagtail,richtext,Django,Python 3.x,Wagtail,Richtext,基本上,我需要将target=“\u blank”属性添加到wagtailDraftailrichtext编辑器中插入的所有外部URL: 编辑-1:这不是重复的wagtailVersion2使用完全不同的richtext编辑器 建议的$('a[href^=“http://”).attr('target','u blank')将为页面上包含http://的所有链接添加适当的属性。这是一个非常次优的解决方案,因为页面上可能有更多不需要这样处理的链接。显然,必须有更充分的修复,特别是因为wagta

基本上,我需要将
target=“\u blank”
属性添加到
wagtail
Draftail
richtext
编辑器中插入的所有外部URL:


编辑-1:这不是重复的
wagtail
Version2使用完全不同的
richtext
编辑器

建议的
$('a[href^=“http://”).attr('target','u blank')
将为页面上包含
http://
的所有链接添加适当的属性。这是一个非常次优的解决方案,因为页面上可能有更多不需要这样处理的链接。显然,必须有更充分的修复,特别是因为
wagtail
已经区分了编辑器UI上的
内部
外部
链接(见附图)

编辑-2:

似乎在
wagtail.core.rich\u text.feature\u registry.FeatureRegistry
类中有一个方法,据我所知,该方法将不同的处理程序分配给不同的URL类型,但我不知道这些处理程序是什么,如何调用或如何修改它们

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

创建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)
类NewWindowExternalLinkHandler(LinkHandler):
标识符='外部'
@类方法
def扩展数据库属性(cls、ATTR):
href=attrs[“href”]
返回“”%escape(href)
@hooks.register('register\u rich\u text\u features')
def寄存器富文本处理程序(功能):
功能。注册链接类型(NewWindowExternalLinkHandler)

由于wagtail版本2使用了完全不同的richtext编辑器,因此可能重复的内容不是重复的内容。您是否确实看到了答案?该解决方案完全独立于后端编辑器。这是一个副本。富文本编辑器已经更改,但链接选择器没有更改,服务器端处理也基本相同。@ThibaudColas正如我在Edit-1中所解释的,建议的答案只不过是一个
JavaScript
hack。你可以通过大量的JavaScript来掩盖许多框架问题,但这并不能解决核心问题。您已经提到,
服务器端处理也基本相同(因此您同意它是不同的,但有点类似),所以我假设您对
wagtail
内部了解很多?为什么不贴一个正确的答案呢?这个问题必须在框架的内部解决(
wagtail
),而不是被
JavaScript
掩盖。
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)