库自动设置apphooks
djangocms-apphook-setup的Python项目详细描述
在项目启动时自动设置apphooks的实用程序函数。
支持的django版本:
- django 1.8至1.11
支持的Django CMS版本:
- Django CMS 3.4至3.5
功能
本实用程序中包含的MIXIN允许自动添加一个ApPHOK到Django CMS 项目第一次访问网站。
这是Django CMS应用程序开发人员通过扩展自己的应用程序来使用的 CMSApp类。
这种行为简化了项目的初始设置,降低了最终用户的障碍。
此处包含的设置功能执行以下操作:
- 检查AppHook是否已添加到CMS页
- 如果是,则跳过任何进一步的步骤
- 如果没有:
- 创建主页(如果不存在)
- 创建主页的子页
- 将应用程序apphook添加到其中
如果应用程序使用aldryn-apphooks-config,则创建apphook配置实例 并与apphook一起添加到应用程序页。
注意
为了避免在创建页面期间出现AldrynSearch问题, 页面是伪造的;这通常不是问题,因为页面将重新编制索引 每当内容更新时。
用法
这个实用程序可以通过扩展CMSApp类,添加auto_setup属性来使用 在cms_app.py:
@apphook_pool.register class App4(AutoCMSAppMixin, CMSConfigApp): name = _('App4') urls = ['sample_app_4.urls'] app_name = 'app4' app_config = App4Config # djangocms-apphook-setup attribute auto_setup = { 'enabled': True, 'home title': 'home title', 'page title': 'page 4 title', 'namespace': 'namespace', 'config_fields': {'random_option': True}, 'config_translated_fields': {'app_title': 'app title', 'object_name': 'name'}, 'sites': True, } # trigger djangocms-apphook-setup function App4.setup()
自定义apphookconfig实例创建
而config_fields和config_translated_fields应该涵盖大多数用例 要创建apphookconfig实例,可能需要对进程进行更多控制。
为此,可以重写AutoCMSAppMixin._create_config和 AutoCMSAppMixin._create_config_translation。
默认实现:
@classmethod def _create_config(cls): return cls.app_config.objects.create( namespace=cls.auto_setup['namespace'], **cls.auto_setup['config_fields'] ) @classmethod def _create_config_translation(cls, config, lang): config.set_current_language(lang, initialize=True) for field, data in cls.auto_setup['config_translated_fields'].items(): setattr(config, field, data) config.save_translations()
如果返回apphookconfig实例,则可以完全重新定义方法。 在_create_config中。
配置选项
设置函数的行为可以通过在 auto_setup属性:
- enabled:如果True调用了安装程序;一个好的选择是使用设置来控制 允许应用程序用户禁用该行为(默认值:True)
- home title:如果由setup函数创建,则主页的标题;此必须设置在 应用程序,否则设置函数将以警告退出。
- page title:由setup函数创建的页的标题;此必须设置在 应用程序{TT1}$,否则安装函数将以警告退出。
- namespace:附加apphook时使用的应用程序实例名;必须在 如果{tt22}$定义了应用程序{tt1}$,否则安装函数将退出。 带着警告。
- config_fields:创建apphookconfigmodel实例时使用的字段;使用此属性 对于非翻译字段。
- config_translated_fields:创建apphookconfigmodel实例时使用的字段; 对转换字段使用此属性(当前仅支持django-parler)。
- sites:要为其创建页面的站点ID列表;如果设置为True(默认值) 将为所有网站创建页面。为所有站点创建一个apphook配置; 实例仅在第一页创建时创建。
测试注意事项
由于此实用程序在导入时触发设置功能,因此必须采取额外的步骤 在测试中卸载测试之间的模块(这仅在测试安装程序时需要)。
要包含在setUp方法中的示例清理:
def setUp(self): super(SetupAppBaseTest, self).setUp() from cms.apphook_pool import apphook_pool delete = [ 'my_app', 'my_app.cms_app', ] for module in delete: if module in sys.modules: del sys.modules[module] MyApphoolConfigModel.cmsapp = None apphook_pool.clear()
历史记录
0.3.0(2018-01-15)
- 添加对多站点设置的支持
- 添加DJANGO 1.11支持
- 添加Django CMS 3.5支持
0.2.0(2016-12-04)
- 添加对多站点设置的支持
- 添加django 1.9、1.10支持
- 添加Django CMS 3.4支持
0.1.2(2015-12-22)
- Monekypatch Aldryn_搜索索引以避免错误
0.1.1(2015-11-02)
- 更容易扩展apphookconfig的创建
0.1.0(2015-10-24)
- 第一个实验版本