Wagtail多站点配置下保留相对URL的方法与根源咨询
问题解答
行为根源
当Wagtail实例存在多个Site时,Page Chooser默认输出完全限定URL的核心原因是:系统无法默认判定选中的页面是否属于当前访问的站点。为了避免跨站点场景下相对路径导致的跳转错误,Wagtail会自动生成包含域名的全URL,确保链接指向正确的目标站点页面。
恢复相对路径的方法
你可以通过以下几种方式在多站点配置下恢复相对路径输出:
1. 模板层面使用relative_url方法
在模板渲染链接时,不要直接调用page.url,而是使用page.relative_url(request.site)。这个方法会自动判断目标页面的站点与当前请求站点是否一致:
- 若站点一致,返回相对路径
- 若站点不一致,返回完全限定URL(保证跨站点跳转正确性)
示例模板代码:
<a href="{{ page.relative_url(request.site) }}">{{ page.title }}</a>
2. 自定义页面字段的URL输出逻辑
如果需要在模型层面控制URL输出,可以重写Page模型的get_url方法(注意:全局重写需谨慎,避免影响其他功能):
from wagtail.models import Page class CustomPage(Page): def get_url(self, request=None): if request and self.get_site() == request.site: return self.relative_url(request.site) return super().get_url(request)
3. 子路径式多站点的配置调整(局限性场景)
如果你的多站点基于同一域名的子路径搭建,可将主站点设置为is_default_site=True,同时让其他站点的root_page作为主站点的子页面。这种场景下,Page Chooser会默认输出相对路径,但仅适用于子路径架构的多站点。
内容的提问来源于stack exchange,提问作者Rich - enzedonline
相关产品推荐
相关产品推荐

