treelake ,Python中文社区专栏作者 项目Github地址:
https://github.com/zr777/school-wiki
项目总体简介请看 用Python搭建一个校园维基网站(一) 本文可独立使用,创建了一个可编辑内容的首页,展示了wagtail的一些基础用法。文末为本文所创项目文件github地址。 比较详细,新手可尝试,不过最好有一定Django基础。
项目结构概观 1、manage.py 是Django 项目通用的管理脚本(通过python manage.py 某命令参数 使用)。 2、requirements.txt 用于存储当前项目的依赖列表(自动生成的为Django 和wagtail ,虚拟环境(virtualenv)下可用pip freeze >> requirements.txt 追加)。 3、genius 包含项目主要信息,有主路由(urls.py )、wsgi接口(wsgi.py )、配置文件夹(分基础配置base.py 、开发环境配置dev.py 与生产环境配置production.py ,后二者依赖基础配置)、全局静态资源文件夹(static )与模板资源文件夹(templates )。 4、home 是自动生成的app 文件夹,包含了models.py 页面数据模型和templates 模板文件夹。默认生成的models.py 中定义了一个简单的HomePage 类(继承自wagtail 的Page 类)来代表一个页面(即默认的欢迎页)的模型(该简单模型的可编辑内容部分只有title 字段)。在wagtail 的概念中,页面模型和模板文件是默认关联的,如HomePage 默认对应的模板为templates/home/home_page.html (注意命名的转换关系),而欢迎页http://127.0.0.1:8000 中的大部分内容就在该模板中(该模板使用extends 语句继承genius\templates\base.html ,并使用block 语句填充相应内容)。如下: 5、search 则是自动生成的提供搜索功能的app 文件夹,由于基于wagtail.wagtailsearch 所以只包含了views.py 视图文件和templates 模板文件夹。暂时不管。
创建wiki主页
我们的WikiHome 页面模型中需要图中红色高亮的一系列字段,其中title 字段继承自Page 类,不用额外添加,image 字段为连接到wagtailimages.Image 模型的外键。content_panels 列表提供了该页面模型在后台管理编辑页面的呈现内容。 此外,对于TopLink 和LittleIntros 我们需要另外新建两个继承wagtail 提供的Orderable (使有序)的非页面模型。 WikiHomeLittleIntros 的字段有fontawesome 图标类名,小标题和简述,如下图。还包含了一个wagtail 提供的对ForeignKey 进行了一层封装的ParentalKey 外键连接到它所属的WikiHome 页面。类似的,panels 表明出现在可编辑区。
WikiHomeTopLink 类似,为了层次上更清晰,采用了多重继承,在models.py 中只定义ParentalKey 外键,而在另一个文件中定义了RelatedLink 模型,包含的字段有链接文本和具体链接,只是具体链接可能为外链、某个页面或某个文档,占用了三个字段,此外还利用@property 装饰器为该模型添加了link 属性,来返回它的具体链接,这样在模板中就可以使用.link 调用。 综上,models.py 的内容因篇幅有限,代码已上传至社区小密圈,可点击阅读原文下载。在models.py 旁新建umodels.py 文件供models.py 引用:
它有一系列现成的layouts 供我们使用,选择最适合本次主页的样式,查看源码可以得到详细的信息,在这里,为了简便,我们直接使用了该layout 的额外样式表的链接(最好处理为本地的css 样式文件,使用Django 的static 标签引用)。 对于模板来说,它对应的页面模型处于它的上下文环境,在模板中可以调用到该页面模型中的所有元素(使用Django 的模板语言)。我们要按照页面排版将元素填充进去。 修改wiki_home.html
|