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}}\Lib\site-packages\djangocms_installer\share\templates\bootstrap下拷贝这几些文件)
================
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
具体算法原理请自行搜索。
django-cms 代码研究(一)djangocms是什么的更多相关文章
- dedecms代码研究二
dedecms代码研究(2)从index开始现在继续,今天讲的主要是dedecms的入口代码.先打开index.PHP看看里面是什么吧.打开根目录下的index.php嗯映入眼帘的是一个if语句.检查 ...
- DEDECMS数据库执行原理、CMS代码层SQL注入防御思路
我们在上一篇文章中学习了DEDECMS的模板标签.模板解析原理,以及通过对模板核心类的Hook Patch来对模板的解析流量的攻击模式检测,达到修复模板类代码执行漏洞的目的 http://www.cn ...
- Django之代码风格
1 代码风格 稍微关注一下下面这些代码标准风格指导规则将会对你大有益处,我们高度建议你通读词章,即便你此时可能正想跳过它. 1.1 让你的代码保持可读性的重要性 代码在读方面的重要性胜过写.一个代码块 ...
- Ningx代码研究.
概述 研究计划 参与人员 研究文档 学习emiller的文章 熟悉nginx的基本数据结构 nginx 代码的目录结构 nginx简单的数据类型的表示 nginx字符串的数据类型的表示 内存分配相关 ...
- 一段markdown编辑器代码研究
一段markdown编辑器代码研究 说明 代码在 https://github.com/dukeofharen/markdown-editor 之所以选择这个来分析是一方面是因为它的代码结构比较简单, ...
- [转载]iOS6新特征:UICollectionView官方使用示例代码研究
原文地址:iOS6新特征:UICollectionView官方使用示例代码研究作者:浪友dans 注:这里是iOS6新特征汇总贴链接 iOS6新特征:参考资料和示例汇总 这个链接可以学习到UIColl ...
- *DataSet序列化,这段代码研究
DataSet序列化,这段代码研究研究.学习学习. using System; using System.Collections.Generic; using System.Linq; using S ...
- CWMP开源代码研究——git代码工程
原创作品,转载请注明出处,严禁非法转载.如有错误,请留言! email:40879506@qq.com 声明:本系列涉及的开源程序代码学习和研究,严禁用于商业目的. 如有任何问题,欢迎和我交流.(企鹅 ...
- django-cms 代码研究(八)app hooks
app钩子,啥玩意呢? 就是把现有的app,集成到cms的一种手段. 有两种实现方式: 1) 定义cms_app.py,如下: from cms.app_base import CMSApp from ...
- django-cms 代码研究(三)插件(plugs in)
插件(plugs in) djangocms支持的插件有: http://docs.django-cms.org/en/latest/basic_reference/plugin_reference. ...
随机推荐
- Bootstrap3.0学习第二十三轮(JavaScript插件——警告框)
详情请查看http://aehyok.com/Blog/Detail/29.html 个人网站地址:aehyok.com QQ 技术群号:206058845,验证码为:aehyok 本文文章链接:ht ...
- JavaScript表单处理(上)
为了分担服务器处理表单的压力,JavaScript提供了一些解决方案,从而大大打破了处处依赖服务器的局面. 发文不易,转载请亲注明出处,谢谢! 一.表单介绍 在HTML中,表单是由<form& ...
- C语言总结(6)
1.表达式: 算数表达式: 单目:+, -, ++, --. 双目:+,-,*,/,%. 赋值表达式: 简单赋值:= 复合赋值:+=,-=,*=,,/=%=,!=. 关系表达式: >,>= ...
- SQL Network Interfaces, error: 50 - 发生了 Local Database Runtime 错误。无法创建自动实例。
今天在用VS2013自带的LocalDB调整数据库时出错,在网上也搜到许多方案,如卸载SQLServer LocalDB的程序.重新创建实例等都没有解决我的问题,也重新修改以及修复Vs,问题依旧存在, ...
- BIEE修改图片步骤:修改BANNER
1.进入目录地址: D:\Oracle\Middleware\user_projects\domains\bifoundation_domain\servers\bi_server1\tmp\_WL_ ...
- BZOJ-1877 晨跑 最小费用最大流+拆点
其实我是不想做这种水题的QWQ,没办法,剧情需要 1877: [SDOI2009]晨跑 Time Limit: 4 Sec Memory Limit: 64 MB Submit: 1704 Solve ...
- HYSBZ 4197 寿司晚宴
Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司晚宴. 在晚宴上,主办方为大家提供了 n−1 种不同 ...
- IIS FTP Server Anonymous Writeable Reinforcement, WEBDAV Anonymous Writeable Reinforcement(undone)
目录 . 引言 . IIS 6.0 FTP匿名登录.匿名可写加固 . IIS 7.0 FTP匿名登录.匿名可写加固 . IIS >= 7.5 FTP匿名登录.匿名可写加固 . IIS 6.0 A ...
- c中动态使用数组
#include <iostream> #include <fstream> #include<stdlib.h> #define MAXNUM 200 int I ...
- UVA11400照明系统设计&& POJ1260Peals(DP)
紫书P275: http://acm.hust.edu.cn/vjudge/contest/view.action?cid=105116#problem/A POJ http://poj.org/pr ...