【发布时间】:2023-03-23 11:51:01
【问题描述】:
我对 Wagtail 真的很陌生。我一直在尝试找到一种方法来过滤选择器(PageChooserPanel)中的值。我正在建立一个故事网站,作者可以在其中创建非线性故事。我遵循一个博客模型来构建它并对其进行扩展。我已经到了作者可以通过可订购链接链接页面的地步。问题是其他故事的可订购显示页面。有没有办法过滤掉不相关的页面。我很感激这方面的任何帮助。提前谢谢!
这是我的代码:
class StoryPath(models.Model):
route = models.ForeignKey('story.StoryPage', on_delete=models.SET_NULL, null=True, related_name='next_path', verbose_name='Story Path')
panels = [
PageChooserPanel('route', page_type='story.StoryPage'),
FieldPanel('correct'),
]
class Meta:
abstract = True
class StoryPathOrderable(Orderable, StoryPath):
page = ParentalKey('story.StoryPage', on_delete=models.CASCADE, related_name='story_paths')
class StoryPage(Page):
template = 'story/story_page.html'
body = RichTextField()
content_panels = [
FieldPanel('title', heading='Section Title', classname='collapsible'),
FieldPanel('body', classname='collapsible'),
MultiFieldPanel(
[
InlinePanel('story_paths'),
],
heading = 'Story Paths',
classname = 'collapsible'
)
]
parent_page_type =['story.Story']
subpage_types = []
def __str__(self):
return '%s' % (self.title)
class Story(Page):
subtitle = models.CharField(max_length=250, null=True, blank=True)
content_panels = Page.content_panels + [
FieldPanel('subtitle'),
]
subpage_types = ['story.StoryPage']
def __str__(self):
return '%s' % (self.title)
编辑:这是我正在使用的模板:
{% extends "base.html" %}
{% load static wagtailcore_tags %}
{% block body_class %}{{self.title}}{% endblock %}
{% block extra_css %}{% endblock extra_css %}
{% block content %}
<div class="d-flex justify-content-center flex-column">
<div class="fs-3">{{page.title}}</div>
<div>{{page.body|richtext}}</div>
</div>
{% endblock content %}
【问题讨论】:
-
您能否更详细地更新问题,最好是您正在使用的模板代码,或者如果您还没有得到您希望输出数据看起来如何的文本表示。看起来 StoryPage 应该有一个 story_paths 的值,并且其中的每个值都应该有 next_page ,它本身就是另一个 StoryPage。
-
我已经发布了模板代码。不过,我目前正在管理员上进行测试创建/编辑。现在,管理站点就足够了。
-
哦,好吧 - 目标是确保 StoryPage 的页面选择器仅显示其他“兄弟”StoryPages 作为选项吗?例如,如果您有 Horror Story 和 Ghost Story,每个 StoryPage 下都有多个 StoryPage,那么作为 Horror Story 子项的 StoryPage 应该只允许您选择 Horror Story 下的其他 StoryPages 而不是 Gost 故事?
-
是的,这样作者就不会混淆其他故事的页面。因此,即使作者有两个包含多个 StoryPage 的故事,如果他正在编辑 Story1 的 StoryPage,他也只能在 Orderable 中看到其兄弟页面。同样,如果他正在处理 Story2 的 StoryPage,他只能看到 Story2 的 StoryPage 的兄弟页面。
标签: wagtail wagtail-admin