Python Wagtail:在基于类的视图中以编程方式呈现页面

Python Wagtail:在基于类的视图中以编程方式呈现页面,python,django,django-models,django-class-based-views,wagtail,Python,Django,Django Models,Django Class Based Views,Wagtail,我有一个Wagtail设置,用户可以选择要呈现的页面,如果没有设置,它将使用最近发布的ListView返回一个列表页面。以下是设置: @register_setting class PeregrineSettings(BaseSetting): """ Settings for the user to customize their Peregrine blog. """ landing_page = models.ForeignKey( 'wag

我有一个Wagtail设置,用户可以选择要呈现的页面,如果没有设置,它将使用最近发布的
ListView
返回一个列表页面。以下是设置:

@register_setting
class PeregrineSettings(BaseSetting):
    """
    Settings for the user to customize their Peregrine blog.
    """
    landing_page = models.ForeignKey(
        'wagtailcore.Page',
        null=True,
        blank=True,
        on_delete=models.SET_NULL,
        help_text='The page to display at the root. If blank, displays the latest posts.'
    )
背景很好用。当我尝试在
列表视图
中使用它时,我试图将
url\u路径
传递给Wagtail的
服务
方法,但它不会呈现页面视图;我有一个404。以下是
列表视图的代码:

class PostsListView(ListView):
    """
    Paginated view of blog posts.
    """
    model = SitePost
    template_name = 'peregrine/site_post_list.html'
    context_object_name = 'posts'
    paginate_by = 10
    ordering = ['-post_date']

    def get(self, request, *args, **kwargs):
        peregrine_settings = PeregrineSettings.for_site(request.site)
        if peregrine_settings.landing_page is None:
            # Render list of recent posts
            response = super().get(request, *args, **kwargs)
            return response
        else:
            # Render landing page
            return serve(request, peregrine_settings.landing_page.url_path)

感觉好像我错过了一种方法,无法将存储在
peregrine\u设置中的
Page
实例传递给要渲染的方法。有人能解释一下这里的内部工作吗?谢谢大家!

我认为您在这里调用的
service
函数是在
wagtail.core.views
中定义的视图?此视图本身没有太多功能-它在站点根页面上调用
route()
来定位正确的页面,然后调用该页面的
service()
方法(传递请求对象)来执行实际的页面呈现。看起来后一种
service()
方法就是您所需要的:

def get(self, request, *args, **kwargs):
    peregrine_settings = PeregrineSettings.for_site(request.site)
    if peregrine_settings.landing_page is None:
        # ...
    else:
        # Render landing page
        return peregrine_settings.landing_page.serve(request)
有关
路线
服务
方法的更多文档可在此处找到:
我认为您在这里调用的
service
函数是在
wagtail.core.views
中定义的视图?此视图本身没有太多功能-它在站点根页面上调用
route()
来定位正确的页面,然后调用该页面的
service()
方法(传递请求对象)来执行实际的页面呈现。看起来后一种
service()
方法就是您所需要的:

def get(self, request, *args, **kwargs):
    peregrine_settings = PeregrineSettings.for_site(request.site)
    if peregrine_settings.landing_page is None:
        # ...
    else:
        # Render landing page
        return peregrine_settings.landing_page.serve(request)
有关
路线
服务
方法的更多文档可在此处找到:

所以我让它工作了——愚蠢的错误。我用
退货服务(请求,peregrine\u设置。登录页面。url\u路径)
替换了
退货服务(请求,peregrine\u设置。登录页面。url)
。但我的问题仍然是:是否有更好的方法使用
Page
实例来实现这一点,还是使用
Page.url
来实现这一点?谢谢。所以我让它工作了——愚蠢的错误。我用
退货服务(请求,peregrine\u设置。登录页面。url\u路径)
替换了
退货服务(请求,peregrine\u设置。登录页面。url)
。但我的问题仍然是:是否有更好的方法使用
Page
实例来实现这一点,还是使用
Page.url
来实现这一点?谢谢