使用django solo的wagtail全局设置编辑器
wagtail-global-settings的Python项目详细描述
使用django solo的wagtail全局设置编辑器
wagtail-global-settings提供全局单例模型编辑 wagtail的接口和前端访问。它使用 django-solo用于模型。
安装
- 安装wagtail-global-settings。
- 将wagtail_global_settings添加到 settings.py。它应该在任何使用 global_settings_tags模板标记。
用法
全局设置
要使用wagtail-global-settings的全局设置,您需要 定义一个模型,它继承自 AbstractGlobalSettingsCollection:
fromdjango.dbimportmodelsfromwagtail.wagtailadmin.edit_handlersimportFieldPanelfromwagtail_global_settings.modelsimportAbstractGlobalSettingsCollectionclassGlobalSettings(AbstractGlobalSettingsCollection):facebook_app_id=models.CharField(max_length=256)google_app_id=models.CharField(max_length=256)analytics_id=models.CharField(max_length=256)panels=[FieldPanel('facebook_app_id'),FieldPanel('google_app_id'),FieldPanel('analytics_id'),]classMeta:verbose_name="Global settings"
对于前端,您有三个选项:
- 使用上下文处理器:
将'wagtail_global_settings.context_processors.global_settings'添加到 然后使用 模板:{{ global_settings.home.GlobalSettings.facebook_app_id }}
- 使用模板标记:
将{% load global_settings_tags %}添加到 模板,然后使用模板中的标记: {% global_settings 'home' 'GlobalSettings' 'facebook_app_id' %}或 {% get_global_settings 'home' 'GlobalSettings' 'facebook_app_id' as facebook_app_id %} {{ facebook_app_id }}。 可以跳过字段名,在这种情况下,您将得到 单例模型实例: {% get_global_settings 'home' 'GlobalSettings' as global_settings %} {{ global_settings.facebook_app_id }}
- 使用由django-solo: 提供的模板标记
在模板的开头添加{% load solo_tags %},然后 在模板中使用标记: {% get_solo 'home.GlobalSettings' as global_settings %} {{ global_settings.facebook_app_id }}
站点特定设置
使用wagtail-global-settingsyou的站点特定设置 需要定义一个模型,它继承自 AbstractSiteSettingsCollection:
fromdjango.dbimportmodelsfromwagtail.wagtailadmin.edit_handlersimportFieldPanelfromwagtail_global_settings.modelsimportAbstractSiteSettingsCollectionclassGlobalSettings(AbstractSiteSettingsCollection):facebook_app_id=models.CharField(max_length=256)google_app_id=models.CharField(max_length=256)analytics_id=models.CharField(max_length=256)panels=[FieldPanel('facebook_app_id'),FieldPanel('google_app_id'),FieldPanel('analytics_id'),]classMeta:verbose_name="Global site settings"
用法与AbstractGlobalSettingsCollection相同, 除外:
- 确保'wagtail.wagtailcore.middleware.SiteMiddleware'在 MIDDLEWARE_CLASSES
- 使用'wagtail_global_settings.context_processors.site_settings' 而不是 'wagtail_global_settings.context_processors.global_settings'和 放在'django.template.context_processors.request'后面 TEMPLATE_CONTEXT_PROCESSORS
- 使用{% load site_settings_tags %}而不是 {% load global_settings_tags %}
- 在中使用{% site_settings %},而不是{% global_settings %}。 模板
- 使用{% get_site_settings %}而不是 {% get_global_settings %}在模板中
- django-solo不能与站点特定设置一起使用
站点特定设置的模板标记允许传递和可选 站点参数: {% site_settings 'home' 'GlobalSettings' 'facebook_app_id' the_site %}。 如果此参数缺少当前站点的设置,则 返回。
视图中的用法
对于AbstractGlobalSettingsCollection:
fromhome.modelsimportGlobalSettingsdefview_func_global(request):global_settings=GlobalSettings.get_solo()returnrender(request,'home/the_template.html',{'facebook_app_id':global_settings.facebook_app_id,})
对于AbstractSiteSettingsCollection:
fromhome.modelsimportGlobalSettingsdefview_func_global(request):site_settings=GlobalSettings.objects.for_site(request.site)returnrender(request,'home/the_template.html',{'facebook_app_id':site_settings.facebook_app_id,})
一般
模板标记可通过两种方式使用: {% site_settings 'home' 'GlobalSettings' 'facebook_app_id' %}和 {% site_settings 'home.GlobalSettings.facebook_app_id' %}。
有关配置和缓存的详细信息,请参阅 django-solo。