Wagatail 2.1(Django)从代码段访问自定义设置

时间:2018-08-28 16:10:28

标签: python django django-models wagtail

所以我有一些需要从界面配置的设置。

@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'),
]

但是我似乎无法从代码段访问这些值?这是因为documentation指出您只能使用python

进行访问
 my_settings = TierPricingSettings.for_site(request.site)

但是,片段无法访问请求对象。如何实现可通过管理面板配置的设置,以及如何在代码段中访问这些值。

1 个答案:

答案 0 :(得分:0)

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 ),或使用将网站对象作为参数的方法进行所有定价。