【问题标题】:Django-Wagtail - How to select the "Choose A Page" panel when adding a model to the content panels?Django-Wagtail - 将模型添加到内容面板时如何选择“选择页面”面板?
【发布时间】:2017-11-09 20:04:33
【问题描述】:

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

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

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

【问题讨论】:

    标签: django wagtail


    【解决方案1】:

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

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

    class SomePage(Page):
        related_page = models.ForeignKey('wagtailcore.Page', null=True, blank=True, related_name='+', on_delete=models.SET_NULL)
        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
            elif self.related_external_url:
                return self.related_external_url
    

    【讨论】:

    • 一个内容丰富、有用且完整的答案...像往常一样!谢谢@gasman
    猜你喜欢
    • 2023-03-08
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-28
    相关资源
    最近更新 更多