謎に包まれた pythonのWordPress mezzanine を運用してみて、思ったことを加えながらまとめてみました。
前回、まだまだプログラミング学習中に右も左もわからないまま、Djangoの記事を書いてみたのですが、Pythonの知識も少なからずついてきたので、ひとまず、Djangoはおいおい書いていくとして、まだ日本語での文献が少ないMezzanineについてまとめていきます!
前回の記事
DjangoのMTVという考え方
Mezzanine はざっくりいうとPythonのCMS。WordPressみたいなものです。
あっという間にカスタマイズ可能なブログページやWebサイトが構築できます。
とりあえず、インストールからデプロイ前までまとめてみます。
どこから始めたらいいかわからないというあなた。とりあえず、Virtualenv をインストールして、環境構築をしましょう!
$ cd Desktop
mkdir mezzanine
cd mezzanine
virtualenv myvenv
とりあえずこれで環境が構築できます。
virtualenv と書いて、 環境の名前を付け足します。
なぜか、myvenv が使われますが(my virtual environment の略)
名前は自分がわかればなんでも良いです。
環境はまっさらな、なにもインストールされてない環境なので(Pythonももちろん入っていません。)
mezzanineをインストールします。
その前に、環境に入りましょう。
$ source myvenv/bin/activate
これで仮想環境に入ることができます。
virtualenv myvenv でmyvenvというフォルダが作られ、そのフォルダの中のbinというフォルダにactivateというファイルがあるんですね。それにより環境に入ることができるというわけです。
環境に入ってから、pip install しましょう。
$ pip install mezzanine
結果
$ Installing collected packages: pytz, tzlocal, chardet,
future,
idna, certifi, urllib3, requests, pillow, grappelli-safe,
oauthlib, requests-oauthlib, filebrowser-safe, django,
django-
contrib-comments, soupsieve, beautifulsoup4, six,
webencodings, bleach, mezzanine
mezzanineをpip install しただけで、これだけのライブラリが一瞬でインストールされました。
あとはそのまま、
$ mezzanine-project sample(任意のプロジェクト名)
これだけで
$ deploy manage.py sample
fabfile.py requirements.txt
こいつら全て作ってくれます。
djangoに精通していれば馴染み深いと思いますが、ここではそれぞれの説明は割愛します。
deployとfabfileはデプロイするときに全部自動で、サーバーに上げてくれるという代物ですが、mezzanineのdjangoが1.1なのと、その他ライブラリもバージョンアップされていたりでエラーが頻繁におきます。
なので、基本的には、マニュアルでデプロイするのをお勧めします。(そのほうが、サーバー周りもわかってきます :) )
そして、ここからは同じで、startapp でアプリケーションの作成をして、データベースの作成をします。(djangoと違い、自動的にデータベースを作ってくれません。。。)
$ python manage.py startapp theme
themeの部分はなんでも良いのですが、テーマという意味で、mezzanineではよく使われます。
そしてデータベース
$ python manage.py createdb
db(database)をcreateですね。シンプルです。
これだけでmigrateもやってくれるので、あとは
$ python manage.py runserver
でローカル環境に入ることができます。
なんと、すでにブログっぽいテンプレートとワードプレスライクな管理画面が作成されています。


素晴らしいですね。
ここからが難しい!
さて、mezzanine について検索するとここまではわかりやすく教えてくれるのですが、ここからが情報が少ないんですよね。。。
実際、複雑になっていきます。
まずはdjangoであまり使う人がおそらく少ないであろうコードを打ちます。
$ python manage.py collecttemplates
Copied 47 templates
こんなメッセージが出てきました。
$ deploy manage.py templates
dev.db requirements.txt theme
fabfile.py sample
これだけでtemplates フォルダが追加されます。
$ base.html generic
search_results.html
blog includes twitter
email index.html
errors pages
mezzanineに使用されている全てのテンプレートがここで入手できます。
実をいうと、startprojectの時点で myvenv(仮想環境フォルダ)の中にこれらのテンプレートが自動で作成されているんですね。
ワードプレスライクな管理画面も、すでにデザインされているトップページも全部、こいつらなのです。
ということは、あとはこれらのファイルをいじっていくと、自分でデザインを変えていけるわけです。
正直、mezzanine を使う上で、models,py とかviews.py とかをいじるのは現実的ではありません。すでに、複雑なCMS機能が構築されているので、そこに手を加えるとなると、通常通りのdjangoの書き方では反映されないのです。
というよりもCMS機能を使う時って、プログラミングに詳しくない人が自分でページを作れるようにしたり、ブログの投稿を簡単にして、メタデータまでいじれるようにするっていうのが王道だと思うので、そもそもバックエンドをいじることも少ないんですよね。
でもフロントは大事です。
テンプレートをいじっていく前に、まずはファイルを確認してみてください。
django特有の{%%}がずらりだと思います。
初めてみた時は、ゲロ吐きそうになりました。
色々なファイルやviews.py と複雑に連携している証拠です。
これをいじるのは流石に骨が折れますよね。。。
まずは、templates フォルダの名前を変更しましょう。
そして、theme フォルダの中にtemplatesを追加します。あとは、名前を変更したフォルダから、ファイルを移動していきます。
なぜこれを行うのかというと、
myvenvの環境の中には、親元のtemplatesフォルダが存在しているわけです。
templatesを全ていじるわけではないので、いじらないtemplateファイル(html)はそのまま反映してほしいわけです。
ただ、自分で色々変更したhtmlファイルに関してはしっかり変更が反映されてほしいので、それらをthemeフォルダの中のtemplatesフォルダに移動して、
コピーしたtemplatesフォルダと全く同じ構造でファイルを置いていきます。
例えば、blogフォルダの中にあるファイルはblogフォルダを作ってから、ファイルを作成していきます。
これでしっかり読み込んでくれます。
そして、settings.py を開きましょう。
installed_appsにthemeを追加します。
必ず一番上に!
とりあえず、base.htmlと同じ階層にあるindex.htmlになんでもいいので、文字を追加してみてください。

文字が変わりました!
つまり、テンプレートをいじれた!
さあ、あとは、djangoと同じように自分で作ったcssファイルを
に追加するなり、bootstrapを使って、デザインを変更していくなり、好きなようにデザインをいじってください!!管理画面でページを追加すればしっかりページがナビに現れますよ!

サイドバーを消すなり、なんでもありです。
- settings.py
LANGUAGE_CODE = "ja"
余談ですが、settings.py のlanguage_codeを’ja’にすることで、管理画面が日本語になります。
あとはTimezoneとかも'Asia/Tokyo'に変更したりしておくと便利ですね。

何がすごいかって、このコードを変えるだけでいろんな言語にmezzanineが勝手に変えてくれます。検索もあるし、色々便利なmezzanineです。
長くなってきたので、そろそろ切り上げようかと思いますが、
大事なポイントを何点か上げていきます。
urls.pyの英語が読めれば、コメント欄を呼んでください。
このurls.pyでブログをトップページに表示させるかとか、とか、新しくデザインを作るかとか(pages/index.htmlにコードを書くことで、トップページだけ、templates/index.htmlのコードを反映させる)
の設定があるので、、、
多くの場合、ブログ用に作成すると思うので、トップにブログ記事を載せる用の設定に変更しなければいけないと思います。
英語の説明ですが、何をすればいいかはurls.pyに書かれています。基本的には #のコメントマークを外して機能すると思います。
base.htmlのnavでdropdown,treeなど、ナビゲーションのスタイルが変更できる。
templates/pages/menus の中からdropdown, tree, primary のどれかを選んで、themeのtemplatesフォルダに同じ構造でコピーし、
base.htmlのnavを少しいじります。
67 {% block navbar_dropdown_menu %}{% page_menu
"pages/menus/dropdown.html" %}{% endblock%}
67行目にありますね。デフォルトではdropdownになっていますが、変更可能です。
終わりに
正直、デプロイ前まで書くといいながら、内容がかなり増えてしまいました。
まだまだ色々、追加できる機能はありますが、とりあえず、トップページと追加するページのデザインをいじることができればサイトとして機能すると思います。
デフォルトで投稿へのコメントとか、シェアボタンとかが実装されているので、その辺りも気にする必要はありませんが、邪魔なら、前述したように、themeのtemplatesの中に持ってきて、消すこともできるので、割と好きなようにいじることができます。
mezzanine を実際に運用してみて
私は正直、djangoの方が好きです。。。笑
その理由の一つがmezzanine がdjango1.1であるということ。
djangoはバージョン2になってから大きく進化しました。使えるライブラリが増えたり、googleに転がってる参考コードがバージョン2だったり。
もう一つが、mezzanineが複雑なシステムで構成されている故のもっさり感です。
正直、djangoの何倍もの容量があるので、少し重たくなります。
もちろんそこまで気になるものでもないのですが、速さを重視するなら断然djangoです。
そして、もう一つがdjangoの素晴らしさ。
djangoと他のフレームワークである Rails等との大きな違いは、URLの設定やデータベースとのやりとりを全て明示的にコードとして書かなければいけないこと。
裏を返せば、
かなり自由にシステム構築ができる
そして、機械学習や数値演算など、pythonが強みとすることがdjangoのシステム内で行えるのです。
今回の記事はmezzanineですが、これはこれからdjangoの記事を書いていくための序章なので、これからはどんどんdjangoの記事を上げていきますw
URLの設定や関数など、バックエンドに関する大半は使い回しもできるように作ることで、一度、複雑なdjangoのシステムを作ってしまえば、2つ目のWebサービス以降は時間が大幅に削減できます。
そして、さらにdjangoのことをわかってくれば、CMSであるmezzanineのようなシステムも素早くdjangoで作れるようになります。
その上で、簡単にデータベースやviews.pyなどのフロントとのやりとりの中間を成す部分も自由にいじることができるので、
mezzanineの実装をするよりは、djangoを極めていくことをお勧めします。笑
とはいうものの、mezzanineを使えば、コード5行くらいで、ブログやHPを作ることもできるので、簡単なブログを作ったりする点ではmezzanineはやっぱり便利だと言えます。
最後に、もっとmezzanineのことを使いこなしていきたいという方は、
こちらのudemyの動画をお勧めします。
今回の内容を含め、デプロイまでの全ての行程をわかりやすく説明してくれています。
英語ですが、動画でのコードをコピペしていくだけでもとりあえず、完璧なものが作れるので、mezzanineを使いこなしていきたい方は、ぜひ、学習してみてください!
ご質問もお待ちしてまーす!