Django-Wagtail - 如何在向内容面板添加模型时选择“选择页面”面板?

时间:2017-11-09 20:04:34

标签: django wagtail

我不确定我是否真的很厚,但我很难在list of available panels找到这个小组。起初我以为是PageChooserPanel,但事实并非如此。这就是我要找的东西:

Choose A Page Panel

将链接插入RichTextField时,此面板可用。它非常适合我的需求,但我似乎无法在其他任何地方找到它。

我正在尝试创建一个字段,编辑器可以选择现有页面或指向外部URL的链接。然后,该网址将输入我模板中的ref="{{ page.my_url }}"

1 个答案:

答案 0 :(得分:5)

此选择器在富文本之外不可用,因为页面链接和外部URL链接在数据库中具有不同的表示形式 - 外部链接是纯URL URL,但页面链接存储为ForeignKey指向相关的页面ID。 (这可确保链接在页面的slug更改时不会中断。)因此,您无法在模型上定义可处理这两种值的可能字段类型

一个常见的解决方法是并排使用两个可选字段 - 用于输入内部链接的PageChooserPanel和用于外部链接的FieldPanel(带有URLField) - 并在模型中包含一些逻辑以从任何一个返回URL一个人填写:

class SomePage(Page):
    related_page = models.ForeignKey('wagtailcore.Page', null=True, blank=True, related_name='+')
    related_external_url = models.URLField("External link", blank=True)

    content_panels = Page.content_panels + [
        PageChooserPanel('related_page'),
        FieldPanel('related_external_url'),
    ]

    def related_url(self):
        if self.related_page:
            return self.related_page.url
        else if self.related_external_url:
            return self.related_external_url