zoukankan      html  css  js  c++  java
  • django-cms 代码研究(一)djangocms是什么

    首先用djangocms生成了一个站点(具体参考这里:http://www.cnblogs.com/Tommy-Yu/p/3878488.html),其文件结构如下:

    本来以为会很有逼格,结果一看傻眼了,这不就是一个普通的django project么?

    看看有神马特别的地方,首先urls.py:

    再看看settings.py,如下:

    如何将一个现有的项目转化为djangocms项目呢?动手尝试之!

    配置的过程中,发现:

    1. cms/mptt/django.contrib.sites/sekizai这些app是必需。

    2. SITE_ID必需,这个东东用来干嘛?

       这个是很长的故事,参考这里:https://docs.djangoproject.com/en/dev/ref/contrib/sites/

    3. LANGUAGES/LANGUAGE_CODE必需。

    4. MEDIA_URL/MEDIA_ROOT必需。

    5. TEMPLATE_LOADERS

    TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
    'django.template.loaders.eggs.Loader'
    )

    必需。

    6. 添加以下中间件,否则报错('user'找不到之类的):

    'cms.middleware.user.CurrentUserMiddleware',
    'cms.middleware.page.CurrentPageMiddleware',
    'cms.middleware.toolbar.ToolbarMiddleware',
    'cms.middleware.language.LanguageCookieMiddleware'

    7. 

    TEMPLATE_DIRS = (
    os.path.join(os.path.dirname(__file__),'templates'),
    #os.path.join(BASE_DIR, 'mysite', 'templates'),
    )

    8. 发现出错,找不到INHERIT模板:TemplateDoesNotExist at /

    INHERIT

    谷歌了一番,没找到理想的答案,跟踪了下出错信息,发现似乎是某个变量没定义,于是看了下官方文档:http://docs.django-cms.org/en/latest/getting_started/integrate.html#requirements

    html5的支持?于是在自动生成的配置文件中搜索了下html,结果第一个找到了page.html,灵机一动,这个不正是INHERIT模板的错误提示所需要的配置么?! 遂配置之,问题解决!(注:需要把自动生成的templates目录拷贝到现有项目里面去,或从{{python path}}Libsite-packagesdjangocms_installershare emplatesootstrap下拷贝这几些文件)

    ================

    CMS_TEMPLATES = (
    ## Customize this
    ('page.html', 'Page'),
    ('feature.html', 'Page with Feature')
    )

     9. 

    TEMPLATE_CONTEXT_PROCESSORS =(
    'django.core.context_processors.request',
    'django.contrib.auth.context_processors.auth',
    'sekizai.context_processors.sekizai',
    )

    10. 似乎一切都正常了。不过新的问题又来了,编辑手工添加的页面时发现似乎哪里不对:

    对比下自动生成的:

    到底哪里不对呢?似乎是配置里面扩展没开?installed_app如下:

    INSTALLED_APPS = (
        'djangocms_admin_style',
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.sites',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'cms',
        'mptt',
        'menus',
        'sekizai',
        'south',
        'eForm',
    )
    

      自动生成的如下:

    INSTALLED_APPS = (
        'djangocms_admin_style',
        'djangocms_text_ckeditor',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.admin',
        'django.contrib.sites',
        'django.contrib.sitemaps',
        'django.contrib.staticfiles',
        'django.contrib.messages',
        'cms',
        'mptt',
        'menus',
        'south',
        'sekizai',
        'djangocms_style',
        'djangocms_column',
        'djangocms_file',
        'djangocms_flash',
        'djangocms_googlemap',
        'djangocms_inherit',
        'djangocms_link',
        'djangocms_picture',
        'djangocms_teaser',
        'djangocms_video',
        'reversion',
        'my_blog'
    )
    

      ok,把这段加上试试:

        'djangocms_style',
        'djangocms_column',
        'djangocms_file',
        'djangocms_flash',
        'djangocms_googlemap',
        'djangocms_inherit',
        'djangocms_link',
        'djangocms_picture',
        'djangocms_teaser',
        'djangocms_video',
    

      oh,no,报错了
    ImportError: No module named djangocms_video

    找不到djangocms_video,难道不是djangocms自动安装的? 看看文档http://docs.django-cms.org/en/latest/basic_reference/plugin_reference.html

    ok,分离出去了:

    In version 3 of the CMS we removed all the plugins from the into separate repositories to continue their development there.

    自行安装之,过程略。安装了一个文本编辑器(https://github.com/divio/djangocms-text-ckeditor),并在installed_app里面添加了'djangocms_text_ckeditor',syncdb一下,效果如下:

    总结: djangocms本质上是个什么东西呢?

         它只是django的一个app,这个app的名字叫做'cms',依赖的app有mptt/django.contrib.sites/sekizai/menus/south,而且这个app具有很好的扩展性。

         相关的核心表有:Pages和Static placeholders,其他略。

        

    ============后记=============================

    发现了一些好东东,对于开发框架很有用,如下:

    1. 调试信息输出栏(比chrome/firefox的自带的分析器更好一些,更django一些)

    debug_toolbar:  http://django-debug-toolbar.readthedocs.org/en/1.2/installation.html

     另外还可以用werkzeug/pdb调试django,前者是出错时才可以调试,后者插入断点进行调试(在没有pycharm等工具时比较有用)。

    2. mptt

    作为一个很不错的存储树状结构数据的算法,它有对应的django实现。文档参考这里:http://django-mptt.github.io/django-mptt/tutorial.html#getting-started

    具体算法原理请自行搜索。

  • 相关阅读:
    用python实现批量替换.doc文件文件内容
    记我是如何通过Security+考试的
    去哪儿笔试羊生羊问题
    CSS作用域问题
    常用的几种清除浮动的方式
    ECE转专业找工作经历-从零电面到facebook offer
    面经-Bloomberg
    题解-Linked List Cycle II
    自我介绍
    解题技巧-发现子结构
  • 原文地址:https://www.cnblogs.com/Tommy-Yu/p/3949169.html
Copyright © 2011-2022 走看看