01
创建专题功能应用
首先跟普通的工程一样我们先实现一个专题应用,然后下一步再把它集成到djangoCMS中去。
创建应用
创建应用serials
python manage.py startapp serials
创建模型
创建module文件,我们需要两个model: serial和entry
serial代表专题连载,entry是专题里的各篇文章,这个文章对应于我们要呈现的blog,当然也包含了一些其他用于专题显示的字段。具体内容如下
简单介绍一下这几个字段
title –专题的标题
abstract –专题摘要,这是对专题的一些概况性描述
image –跟专题相关的图片,用于显示
order –用于排序
active –控制是否显示,前端只显示处于激活状态下的连载内容
timestamp –创建时间,该字段默认更新
updated –更新时间,该字段自动赋值
Meta里的ordering设置为['order','-updated'],这样就能按照我们指定的顺序显示
entry model里,对url这个字段简单介绍一下,这个就是对应的博客的链接,不是相对路径。这个跟评论的关联有点类似,当然将来这种专题可以扩展到不仅仅针对博客,也可以针对视频或者其他内容
执行makemigrations和migrate生成数据表
实现专题列表视图
我们需要实现两个视图,显示所有专题的视图以及访问某个专题时的对应显示。Django强大的class-based-view模块提供了实现该功能的基本方法
在queryset里,针对对象做了过滤,只提取了active的对象,便于后面对内容发布进行控制。
模板存放位置在template_name里指定,如果你用系统指定的路径和名字,该变量可以不赋值。
添加文件template/serias_list.html
内容显示放在了模板文件serial_list_content.html里,因为后面显示详情了还会用到
给这个视图添加URL
创建serials/urls.py
更新项目urls.py
注意:把course对应的URL一定要放在cms.url前面,否则cms会处理所有前面没处理的模式pattern。
添加专题内容
内容添加在后台完成,添加下面的代码来支持serial和entry的添加。
在admin添加对应的serial和entry。
这个时访问http://127.0.0.1:8000/zh/course/,就可以看到如下的效果而来
实现专题详情视图
上面列出了所有的专题内容,点开某个专题时应该会列出该专题所有的博客文章,接下来我们来实现它
在views.py添加
实现模板serials_detail.html,
详情视图里我们继续包含serial_list_content的内容,这部分和列表页是一样的,另外,我们还要添加entries列表,代码如下
添加对应的URL
访问http://127.0.0.1:8000/zh/course/1,效果如下
02
CMS集成应用
接下来进入到本文的重点,如何将上面的应用集成到djangoCMS里。
我是参考下面教程完成的
http://docs.django-cms.org/en/latest/introduction/plugins.html#plugins-tutorial
http://docs.django-cms.org/en/latest/introduction/integrating_applications.html
教程里额外建了个应用来处理插件,为了简化,我还是在原来的应用里完成了插件实现。
Plugin Model
在models.py里添加下面代码
注意:CMS plugin都是从CMSPlugin继承来的,不是从models.Model
Plugin Class
在models.py同级目录创建文件cms_plugin.py,这个plugin类负责向CMS提供相应的信息来渲染你的plugin
代码实现如下
注意:plugin类必须从CMSPluginBase继承,并且在plugin_pool注册
模板
需要在plugin类里对属性render_template进行赋值,plugin将用这个模板渲染
内容如下
这个就是前面我们前面详情视图的内容,只保留了内容部分。
集成应用
至此,该应用到CMS的集成已完成。如果你用额外的应用来实现plugin的话,还需要将它添加到settings.py里。
再次添加插件时,可以看到serial已经在其中了。
点击Serial Plugin,可以在下面页面中选到我们前面添加的专题内容。
最终呈现效果
关注下方公众号获取更多文章
领取 专属20元代金券
Get大咖技术交流圈