码迷,mamicode.com
首页 > 移动开发 > 详细

django-cms 代码研究(八)app hooks

时间:2014-09-16 17:17:30      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:blog   http   io   ar   for   div   sp   代码   log   

app钩子,啥玩意呢?

就是把现有的app,集成到cms的一种手段。

有两种实现方式:

1) 定义cms_app.py,如下:

from cms.app_base import CMSApp
from cms.apphook_pool import apphook_pool
from django.utils.translation import ugettext_lazy as _

class MyApphook(CMSApp):
    name = _("My Apphook")
    urls = ["myapp.urls"]

apphook_pool.register(MyApphook)

官方文档查看这里:http://docs.django-cms.org/en/latest/extending_cms/app_integration.html#app-hooks

加载逻辑,通过discover_apps的load(‘cms_app‘)来加载(前提是在settings.py中未定义 CMS_APPHOOKS):在所有的installed_app中,查找cms_app模块,并自动import_module

 

2) 在setting.py中定义CMS_APPHOOKS

APPHOOKS=(
‘yourmodule.you_object1‘,‘yourmodule.you_object2‘,...
)

这是从源码中分析的来的,如下:

C:\Python27\Lib\site-packages\django_cms-3.0.3-py2.7.egg\cms\apphook_pool.py (45~57)

    def discover_apps(self):
        self.apphooks = get_cms_setting(‘APPHOOKS‘)

        if self.apphooks:
            for cls in iterload_objects(self.apphooks):
                try:
                    self.register(cls, discovering_apps=True)
                except AppAlreadyRegistered:
                    pass

        else:
            load(‘cms_app‘)

        self.discovered = True

iterload_objects,是一个生成器,如下:

def iterload_objects(import_paths):
    """
    Load a list of objects.
    """
    for import_path in import_paths:
        yield load_object(import_path)

load_object

def load_object(import_path):
    if ‘.‘ not in import_path:
        raise TypeError(
            "‘import_path‘ argument to ‘django_load.core.load_object‘ must "
            "contain at least one dot."
        )
    module_name, object_name = import_path.rsplit(‘.‘, 1)
    module = import_module(module_name)
    return getattr(module, object_name)

  



 

 

django-cms 代码研究(八)app hooks

标签:blog   http   io   ar   for   div   sp   代码   log   

原文地址:http://www.cnblogs.com/Tommy-Yu/p/3975330.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!