在Wagtail中,如何处理单例页面?

问题描述 投票:0回答:1

我正在开发一个鹡鸰网站。有些页面具有特定的设计,仅存在于一页上(例如“我们是谁”,带有图片和个人简介列表,“它是如何工作的”,以非常特定的方式集成了一些非常特定的图表,主页页...)。

目前,对于这些页面,我正在每页创建一个模型/模板,但它并不完美:

  • 页面没有动态内容,可以提前选择url。我可以使用一个简单的静态 html 资源,它不会有正确的 url(它会像
    domain.com/static/who-are-we.html
    而不是
    domain.com/who-are-we
  • 非技术编辑很困惑(为什么我可以创建超过 1 个“我们是谁”页面?)
  • 由于该页面是单例,因此在其他页面中引用它应该很容易。但目前我必须向其他页面模型添加一个字段并每次选择该页面。这太糟糕了,因为我知道存在且只有一页“我们是谁”,所以我想直接将其集成到模板中并跳过模型中的一个字段。

Wagtail 有处理这种情况的惯用方法吗?

django wagtail
1个回答
0
投票

按照 Dan Hayden 的建议,您可以将

max_count = 1
添加到您的页面模型中,以确保只能创建一个。

我通常对像这样的单例页面(例如合法页面)所做的是将它们添加到SiteSetting。这样,页面只需在 CMS 管理的设置区域中设置一次。

设定模型

from django.db import models
from wagtail.admin.panels import FieldPanel
from wagtail.contrib.settings.models import BaseSiteSetting, register_setting

@register_setting
class GlobalSettings(BaseSiteSetting):
    legal_page = models.ForeignKey("yourapp.LegalPage", on_delete=models.SET_NULL, null=True)

    panels = [
        FieldPanel("legal_page")
    ]

访问模板中的设置

{% load wagtailsettings_tags %}

{# legal_page can be empty so consider being defensive! #}
{% if settings.yourapp.GlobalSettings.legal_page %}
   {% with settings.yourapp.GlobalSettings.legal_page as legal_page %} 
      <a href="{{ legal_page.full_url }}">{{ legal_page.title }}</a>
   {% endwidth %}
{% else %}
  No legal page set
{% endif %}
© www.soinside.com 2019 - 2024. All rights reserved.