Python Wagtail:在基于类的视图中以编程方式呈现页面
我有一个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
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
来实现这一点?谢谢