Wagtail渲染索引页中的任何路径

2024-05-22 00:28:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要使一些网页写一个任意的网址,不依赖于网站的结构。你知道吗

例如,我有一个结构:

/
/blog
/blog/blogpost1
/blog/blogpost2

但是,例如,我需要将url从/blog/blbogpost2更改为/some/blogpost/url1

为此,我决定给这个机会来处理网站主页的任何URL。你知道吗

class IndexPage(RoutablePageMixin, Page):
    ...
    @route(r'^(?P<path>.*)/$')
    def render_page_with_special_path(self, request, path, *args, **kwargs):
        pages = Page.objects.not_exact_type(IndexPage).specific()
        for page in pages:
            if hasattr(page, 'full_path'):
                if page.full_path == path:
                    return page.serve(request)
        # some logic

但是现在,如果这个path没有找到,但是我需要将这个请求返回给标准处理程序。我该怎么做?你知道吗


Tags: path网页if网站requestpageblogsome
1条回答
网友
1楼 · 发布于 2024-05-22 00:28:22

这在RoutablePageMixin中是不可能的;Wagtail将URL路由和页面服务视为两个不同的步骤,一旦确定了负责服务页面的函数(对于RoutablePageMixin,通过检查@route中给出的URL路由来完成),就无法返回URL路由步骤。你知道吗

但是,它可以通过overriding the page's ^{} method完成,这是一种低级机制used by ^{}。您的版本如下所示:

from wagtail.core.url_routing import RouteResult

class IndexPage(Page):
    def route(self, request, path_components):
        # reconstruct the original URL path from the list of path components
        path = '/'
        if path_components:
            path += '/'.join(path_components) + '/'

        pages = Page.objects.not_exact_type(IndexPage).specific()
        for page in pages:
            if hasattr(page, 'full_path'):
                if page.full_path == path:
                    return RouteResult(page)

        # no match found, so revert to the default routing mechanism
        return super().route(request, path_components)

相关问题 更多 >