使用Wagtail一段时间后的感受

系列文章目录

例如:



前言

Wagtail是一个用Python编写的开源CMS,建立在Django Web框架上。
选择wagtail的原因:

  • 它能快速实现页面的表达,对于我这种对新实现的功能想要找到地方进行展示,但前端能力又不太行的同学
  • 基于django 一直会对django的稳定版本进行支持

一、超快的部署

构建项目

pip install wagtail
wagtail start mysite
cd mysite
pip install -r requirements.txt
python manage.py migrate
python manage.py createsuperuser
python manage.py runserver

得到项目如下:
在这里插入图片描述
构建的时间取决于,你家的网速有多快

配置pycharm运行和调试django项目

这里用社区版的pycharm进行演示,也是最通用的方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
配置项目manage.py的路径
参数设置可以使用 runserver 0.0.0.0:8000 或者直接用runserver
配置完成后
就可以使用打断点进行调试,需要注意的是 如果修改了代码并且保存了,项目会重新加载导致断点失效。
在这里插入图片描述

最需要做的事

这个时候我们已经能够看到实际的页面了:
在这里插入图片描述
但是我们需要它吗? 我们不需要,我最开始就说了我最想用的是他的后台管理页面。

还记得之前创建了一个超级用户 python manage.py createsuperuser
这里我们再网站后面加上/admin,进入后台管理页面,到了这里 才是自己最喜欢的一部分,好看的后台页面。
我们需要的就是它的后台。
在这里插入图片描述

二、炫一个博客网站

页面模型

  • 首页模型 HomePage
  • 博客模型 BlogPage
from django.db import models
from wagtail.admin.edit_handlers import FieldPanel
from wagtail.core.fields import RichTextField

from wagtail.core.models import Page


class HomePage(Page):
    # page模型默认提供了title字段
    # title = models.CharField()
    body = RichTextField(blank=True)

    content_panels = Page.content_panels + [
        FieldPanel('body', classname='full')
    ]


class BLogPage(Page):
    tag = models.CharField(max_length=255)
    category = models.CharField(max_length=255)
    body = RichTextField(blank=True)

    content_panels = Page.content_panels + [
        FieldPanel('tag', classname='full'),
        FieldPanel('category', classname='full'),
        FieldPanel('body', classname='full'),
    ]

然后后台管理页面查看一下,在创建页面的时候就能够找到新建好的model,把model中的字段增加到content_panels 里就能在后台进行编辑。wagtail还提供了一种流式的布局方案可以对内容进行更多的自定义,普通的富文本编辑已经足够使用。我还尝试结合第三方库对字段支持md编辑器,和更加丰富的富文本编辑能力。
当然图片的支持也是相当的好的。
在这里插入图片描述
在这里插入图片描述

页面管理

默认是提供了一个home页面对应的就是HomePage ,点击home页面后进入子页面管理,这里可以包含分类model,博客model标签model,画廊model等,即便是根据现有的两个page(homepage/blogpage)都能构建一个结构完整的博客架构。

简单尝试:
在这里插入图片描述
对页面可以进行实时的查看,可以说对急于看到数据的朋友来说是一个经常使用的东西,我在日常工作中,通常会在不同场景下基于基本的页面model去构建一个新的单一的pagemodel,通常这个pagemodel也只会使用一次,到了版本需要迭代更新的时候才会去基于这个pagemodel新建一个页面,新的功能再新的页面上实现后,直接对页面的缩略名进行替换即可。

总结

wagtail是一个快速搭建文档管理网站的利器,后台管理平台使用的非常让人舒适。
在工作中我实现了什么,使用wagtail 实现了对项目资料的管理构建多种场景的blogpage,

  • 结合富文本工具直接实现复制粘贴即为 发布即可见,
  • 构建通用form,完成项目效率工具的集成。
  • 结合表格实现项目设备管理
  • 实现todolist 帮助同事及时更新工作进度
  • 监控项目设备的健康
如果你不想使用`list_filter`过滤器,在`wagtail_hooks.py`文件中自定义一个过滤器可以使用`register_filter`装饰器。 以下是一个简单的例子,展示了如何创建一个名为`CustomStatusFilter`的自定义过滤器: ```python from django.utils.translation import ugettext_lazy as _ from wagtail.contrib.modeladmin.options import ( ModelAdmin, ModelAdminGroup, register_filter ) from .models import MyModel class CustomStatusFilter: parameter_name = 'status' def __init__(self, request): self.request = request def queryset(self, modeladmin, queryset, value): if value == 'published': return queryset.filter(status='published') elif value == 'draft': return queryset.filter(status='draft') return queryset def choices(self, changelist): yield { 'selected': self.value() is None, 'query_string': changelist.get_query_string(remove=[self.parameter_name]), 'display': _('All'), } yield { 'selected': self.value() == 'published', 'query_string': changelist.get_query_string({self.parameter_name: 'published'}), 'display': _('Published'), } yield { 'selected': self.value() == 'draft', 'query_string': changelist.get_query_string({self.parameter_name: 'draft'}), 'display': _('Draft'), } class MyModelAdmin(ModelAdmin): model = MyModel menu_label = 'My Model' menu_icon = 'placeholder' list_display = ('title', 'status') ordering = ('-id',) def get_filters(self, request): filters = super().get_filters(request) filters.insert(0, CustomStatusFilter(request)) return filters class MyModelAdminGroup(ModelAdminGroup): menu_label = 'My Models' menu_icon = 'folder-open-1' items = (MyModelAdmin,) # Register the custom status filter register_filter(CustomStatusFilter) # Register the ModelAdminGroup modeladmin_register(MyModelAdminGroup) ``` 在上面的代码中,我们首先定义了一个名为`CustomStatusFilter`的类,该类实现了`queryset`和`choices`方法。`queryset`方法用于过滤出符合条件的数据,而`choices`方法用于在过滤器中显示选项。 然后,我们在`MyModelAdmin`中重写了`get_filters`方法,并将`CustomStatusFilter`添加到过滤器列表的开头。 最后,我们使用`register_filter`装饰器将`CustomStatusFilter`注册到Wagtail中。 这样,你就可以在Wagtail的ModelAdmin页面中使用`CustomStatusFilter`过滤器了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坠入my

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值