python - Wagatail 2.1 (Django) 来自 Snippet 的自定义设置访问
问题描述
所以我有一些设置需要从界面进行配置。
@register_setting
class TierPricingSettings(BaseSetting):
Monday = models.CharField(max_length=255)
Tuesday = models.CharField(max_length=255)
Wednesday = models.CharField(max_length=255)
Thursday = models.CharField(max_length=255)
Friday = models.CharField(max_length=255)
Saturday = models.CharField(max_length=255)
Sunday = models.CharField(max_length=255)
content_panels_english = [
FieldPanel('Monday'),
FieldPanel('Tuesday'),
FieldPanel('Wednesday'),
FieldPanel('Thursday'),
FieldPanel('Friday'),
FieldPanel('Saturday'),
FieldPanel('Sunday'),
]
但是我似乎无法从片段中访问这些值?这是因为文档 说明您只能通过使用 python 访问它
my_settings = TierPricingSettings.for_site(request.site)
但是,代码片段无权访问请求对象。我如何实现从管理面板配置设置并在片段中访问这些值。
解决方案
wagtail.contrib.settings 模块的工作基础是 Wagtail 安装上的每个站点都有自己的一组设置。片段没有属于特定站点的内置概念(更一般地说,模型代码应该独立于当前请求工作),所以这里我们需要一些其他方法来识别要查找哪个站点的设置。
如果您仅在此 Wagtail 实例上运行单个站点并且不打算再添加任何内容,则可以使用以下命令告诉它从唯一站点中获取设置:
from wagtail.core.models import Site
my_settings = TierPricingSettings.for_site(Site.objects.first())
如果您有多个站点(或将来可能会这样做),但您希望全局TierPricingSettings
对象应用到任何地方,最好的方法是在设置 -> 站点下将您的站点之一设置为“默认站点”,并确保您有填写TierPricingSettings
管理员时选择的那个站点。然后查找相应的站点,如下所示:
from wagtail.core.models import Site
my_settings = TierPricingSettings.for_site(Site.objects.get(is_default_site=True))
如果您确实希望设置根据当前活动的站点而有所不同,您需要更新您的代码片段模型以具有属于站点的明确概念(例如添加外键Site
),或者进行所有定价计算在接收站点对象作为参数的方法中。
推荐阅读
- google-apps-script - How to add a table of contents to a Google Sheets spreadsheet?
- c++ - boost::variant 中持有的类的复制构造函数的问题
- swift - 如何以编程方式在 Swift 中扩展 NSPopUpButton?
- bash - UNIX Bash - 从文件中的特定字符串中删除双引号
- python - 如何在 python 中使用条件来解决下面显示的代码?
- c++ - Curl with vcpkg
- openiddict - Invalid Cast Exception with on .NET Core 3.1 with 3.0.0-beta1.20306.64
- python - 如何使用 Tweepy 排除推文?Python
- javascript - 渲染页面加载时已选择的单选按钮 - React js
- java - Arduino 等价于 Java parseLong