pythondjango项目集成_[Python]将Wagtail整合到Django2项目中

本文介绍了如何将Wagtail CMS整合到Django 2.x项目中,包括安装Wagtail,创建独立站点,再到手动整合到现有Django项目,配置settings.py、urls.py,以及解决遇到的常见问题。通过这个过程,读者可以学习到Django和Wagtail的集成技巧。
摘要由CSDN通过智能技术生成

Django是Python主流的Web框架之一,目前主要版本是Django 2.1,但是很多扩展都是基于Django 1.x。最近想做个简单的Web发布,选择了Wagtail,因为其他两个主流的cms系统django-cms、mezzanine都不支持Django 2.x。由于项目需要,要将Wagtail整合进原来的Django项目中。(说个题外话,如果有时间敲代码,还是建议自己敲代码开发项目,用各种免费扩展然后去修改,处处是坑)

思路是先用Wagtail创建项目文件夹,再拷贝到django2里手工创建项目整合。

作为独立站安装

依次执行以下代码:

$ 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

创建项目:

$ python manage.py startapp cmssite

执行完这一步之后,mysite文件夹下就有个cmssite文件夹,现在可以停止掉Wagtail服务了。

手工创建项目进行整合

将cmssite文件夹拷贝到Django根目录(我的是D:\dsites\)下,作为你的项目。将Wagtail的mysite\mysite\templates下面的base.html拷贝到Django的templates文件夹里。(这是坑点之一)

到setting.py里 INSTALLED_APPS添加:

'wagtail.contrib.forms',

'wagtail.contrib.redirects',

'wagtail.embeds',

'wagtail.sites',

'wagtail.users',

'wagtail.snippets',

'wagtail.documents',

'wagtail.images',

'wagtail.search',

'wagtail.admin',

'wagtail.core',

'modelcluster',

'taggit',

'cmssite',

MIDDLEWARE添加:

'wagtail.core.middleware.SiteMiddleware',

'wagtail.contrib.redirects.middleware.RedirectMiddleware',

如果你之前没有设置STATIC_ROOT,则要添加:

STATIC_ROOT = os.path.join(BASE_DIR, 'static')

添加WAGTAIL_SITE_NAME:

WAGTAIL_SITE_NAME = '站点名称'

在根目录创建media文件夹(就是cmssite并列的文件夹),并添加:

MEDIA_URL = '/media/'

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

配置urls.py(可以根据自己需要设置):

from django.urls import path, re_path, include

from wagtail.admin import urls as wagtailadmin_urls

from wagtail.documents import urls as wagtaildocs_urls

from wagtail.core import urls as wagtail_urls

urlpatterns = [

...(你原来配置)

re_path(r'^cms/', include(wagtailadmin_urls)),

re_path(r'^documents/', include(wagtaildocs_urls)),

re_path(r'^news/', include(wagtail_urls)),

]

这样,cmssite的首页就是/news/,管理页面是/cms/

在model.py页面建立一个模型,比如HomePage:

from django.db import models

from wagtail.core.models import Page

from wagtail.core.fields import RichTextField

from wagtail.admin.edit_handlers import FieldPanel

class HomePage(Page):

body = RichTextField(blank=True)

content_panels = Page.content_panels + [

FieldPanel('body', classname="full"),

]

对应的,在你的templates文件夹下创建一个cmssite文件夹,然后创建一个home_page.html

{% extends "base.html" %}

{% load wagtailcore_tags %}

{% block body_class %}template-homepage{% endblock %}

{% block content %}

{{ page.body|richtext }}

{% endblock %}

然后,命令行执行:

$ python manage.py makemigrations

$ python manage.py migrate

$ python manage.py runserver 8080

然后/cms/进入管理界面,进入settings > sites

配置默认站点,Root page一定要选择刚才的 home_page (这是坑点之二,你肯定一直想在urls.py里配置入口)

接下来你就可以在cmssite里继续倒腾了。

总结

Wagtail是基于Django的,但是对Django做了很多封装简化,比如取消了内部urls配置,取消了views(直接让model绑定了template),貌似简单了,但是留下了很多坑点,如果以Django的思维去处理Wagtail就会遇到很多麻烦。当然了,Wagtail里面还是可以用Django方式来开发的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值