Wagtail无头模式下如何覆写富文本编辑器内部链接指向前端域名
Wagtail无头模式下富文本内部链接自定义方案
内部链接完全支持通过和外部链接一致的自定义LinkHandler方式覆写URL生成规则,目前Wagtail已经开放了标准扩展点,不需要像早年相关讨论里提到的那样魔改核心代码。
实现逻辑
内部页面对应的链接类型标识符为page,你只需要继承LinkHandler实现对应类,替换默认的页面链接处理器即可。
第一步:编写自定义链接处理器
在你的项目app内新建文件(比如命名为rich_text_handlers.py),写入以下代码:
from django.utils.html import escape from wagtail.rich_text import LinkHandler # 注意:Wagtail 3.0以下版本请将导入路径替换为 from wagtail.core.rich_text import LinkHandler class FrontendPageLinkHandler(LinkHandler): identifier = 'page' @classmethod def expand_db_attributes(cls, attrs): page = cls.get_instance(attrs) if not page: return "<a>" # 此处可根据自身业务调整域名映射逻辑 page_relative_path = page.url # 单站点场景直接写死前端域名即可 frontend_base = "https://my-frontend-domain.com" # 多站点场景可通过所属后端站点匹配对应前端域名,参考逻辑: # belong_site = page.get_site() # frontend_base = SITE_DOMAIN_MAP[belong_site.hostname] final_href = f"{frontend_base}{page_relative_path}" # 可按需添加target、rel等属性,和外部链接覆写逻辑完全一致 return f'<a href="{escape(final_href)}" rel="nofollow noreferrer">'
第二步:注册自定义处理器
在对应app的wagtail_hooks.py文件中添加注册逻辑,覆盖默认的页面链接处理器:
from wagtail import hooks # 注意:Wagtail 3.0以下版本请将导入路径替换为 from wagtail.core import hooks from .rich_text_handlers import FrontendPageLinkHandler @hooks.register("register_rich_text_features") def override_page_link_handler(features): features.register_link_type(FrontendPageLinkHandler)
注意事项
- 配置生效后,所有富文本字段渲染时生成的内部页面链接都会自动替换为你配置的前端域名格式,不需要额外修改前端渲染逻辑
- 该扩展方式是Wagtail官方支持的标准扩展点,版本兼容性好,不会随小版本升级失效
- 多站点场景只需要维护一份后端域名和前端域名的映射表,即可自动适配不同站点下的链接生成规则,不需要单独为每个站点写处理逻辑
内容的提问来源于stack exchange,提问作者Thorvald
相关产品推荐
相关产品推荐

