pythondjango项目集成_[Python]将Wagtail整合到Django2项目中
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方式來開發的。
總結
以上是生活随笔為你收集整理的pythondjango项目集成_[Python]将Wagtail整合到Django2项目中的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql远程无法登陆_无法远程登陆My
- 下一篇: spark 持久化 mysql_Spar