Django CMS 插件–添加博客专题

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,可以在下面页面中选到我们前面添加的专题内容。

最终呈现效果

关注下方公众号获取更多文章

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180808G01K5Y00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券