#12878·wagtail

富文本页面中的 URL 生成 链接处理器不正确处理多站点设置

作者: joeyjurjens创建于 2025年2月13日更新于 2026年9月12日
标签type:Bugstatus:Unconfirmed

问题摘要 在多站点设置中使用有页面链接的富文本字段时,URL生成时没有适当的站点上下文,导致潜在的不正确的URL. 这是因为页面链接处理器在生成URL时无法访问当前请求/站点.

  • 重现步骤
  1. 创建多站瓦格尾设置,设两个站点(127.0.0.1,港口8000 & 127.0.0.1港口9000).
  2. 将站点1的根页翻译为不同的地块,并将其设置为站点2的根.
  3. 运行两个服务器(使用 manage.py),并使用不同的设置,对两者使用不同的语言代码.
  4. 访问两个端口8 000和9 000的丰富字段内的页面链接
  5. 其中一页将实际链接到另一个网站的url。
  • 我已确认,这个问题可以按Wagtail新项目所描述的那样转载:是

技术细节 问题在于:丰富的页面链接没有当前请求的上下文,甚至没有提供时的网站. 这意味着, " get url " 被叫来时没有请求,也没有传入的站点。

然后get url parts会回错部分,因为没有要求,只是猜测;

get url'然后将使用get url'在无当前站点时返回的url生成; [还原root url + page path] (https://GitHub.com/wagtail/wagtail/blob/main/wagtail/models/pages.py#L1386) (中文(简体) ).

我认为这一部分可能是问题所在,实际上是不正确的。 当我们有页面实例,而且没有可用的网站时,我们真的不应该只返回“page-path”吗?

另外,[get site root paths](https://GitHub.com/wagtail/blob/main/wagtail/models/sites.py#L207-L266]在站点上的静态方法,难道不应该首先返回符合当前语言的站点吗? 虽然我们可能需要不同的缓存密钥 在这个情景中。

但老实说,真正的问题似乎是`richtext'模板过滤器。

建议的解决办法

  1. 改变get-url'或PageLinkHandler'的行为

执行工作将包括:

  • 如果我们没有找到确切的地点,不要在get url'中返回root url + page path'。 或
  • 在`PageLinkHandler'中不要使用.url,而是使用只返回路径的东西?

  1. 使用`asgiref'。 本地“(类似于Wagtail的日志系统)在网页服务和模板渲染期间维护请求/站点上下文。 这将允许链接处理器在生成 URL 时访问当前站点 。

执行工作将包括:

  1. 增加使用`asgiref ' 处理请求/现场上下文。 当地
  2. 在服务视图中添加这一背景
  3. 更新页面链接处理器, 以使用 URL 生成的上下文( 也许还有其他地方)

努力解决此事 如果其中一项提案听起来不错,或者还有你们提出的其他提案,我可以着手处理。

这也应该解决; . . . . . . .

内容来源: wagtail/wagtail