※ 商品のリンクをクリックして何かを購入すると私に少額の報酬が入ることがあります【広告表示】 sakusakuのあかぎあいウィークを見ながら、 ワシントンタイムス の django-projectmgr を試しちまおうという謎の企画でござんす。djangoは1.0のリリース版を使ってます。
django-projectmgr はdjango製Version Control System manager and bug and feature tracking applicationらしいです。俺的にはいじりにくいtracの代わりにしたいと狙ってるやつです。とにかくwiki記法が嫌いなんで(tracを入れてるサーバにdocutilsを入れてもらったから実はそんなに困ってはいない)。
さてさて、こまったことにこの django-projectmgr は、今のところ全くドキュメントがありません。チェックアウトの仕方もよくわからなかったのですが、なんとなくやったらチェックアウトできました。
まず、 django-projectmgr は、djangoのアプリケーションだということが重要です。merbでいうところのスライス?ですね。merb、いいところをパクリましたよ。
ちなみに、djangoは再利用可能なアプリケーションを組み合わせてサイトを構築します。GAEにJavaが登場したというニュースで、Pythonがあんまり人気なさそうなことを書いている人もいますが、 DjangoのアプリケーションがGoogle Codeに幾つ登録されているか 知ってますか?
ま、いいや。まず、適当なプロジェクトを作ります。
$ django-admin.py startproject wt
で、面倒なので今回はプロジェクトの中にdjango-projectmgrをチェックアウトします。起動してみるとわかるんですが、 django-threadedcomments というアプリケーションも利用しているようなので同じ場所にチェックアウトしてしまいます。
$ cd wt
$ svn co http://opensource.washingtontimes.com/projects/public/django-projectmgr/trunk/projectmgr projectmgr
$ svn co http://django-threadedcomments.googlecode.com/svn/trunk/threadedcomments threadedcomments
チェックアウトできたら、プロジェクトのsettings.pyを修正します。※一部抜粋
wt/settings.py
DATABASE_ENGINE = 'sqlite3' # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
DATABASE_NAME = 'test.db' # Or path to database file if using sqlite3.
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.admindocs',
'django.contrib.admin',
'threadedcomments',
'projectmgr',
)
リクエストを割り振ります。プロジェクトのurls.pyでadminとadmindoc、それからprojectmgrへリクエストを委譲する設定をします。よくわからないので、adminとadmindoc以外は全部委譲してしまっています。
wt/urls.py
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
(r'^admin/doc/', include('django.contrib.admindocs.urls')),
(r'^admin/(.*)', admin.site.root),
(r'^', include('wt.projectmgr.urls')),
)
はやる気持ちを抑えつつ、必要なテーブルを作ります。スーパーユーザも作っておきましょう。次いで、開発サーバを起動します。
$ python manage.py syncdb
$ python manage.py runserver
期待をしつつ、ブラウザでhttp://localhost:8000/を開きます!
あれれれれ?base.htmlがないって言われてる。セオリーに従って、アプリケーションのテンプレートはbase.htmlというファイルを継承しているようです。プロジェクトに組み込みやすい(再利用しやすい)素晴らしい実装なのですが、恐ろしいことにサンプル的なbase.htmlがありません。
エラーを出しているテンプレート(wt/projectmgr/templates/project_list.html)を見てみると、 {% block content %} というブロックを使っているようです。ついでにアプリケーションのテンプレートディレクトリ(wt/projectmgr/templates)を見てみると、project_base.htmlというそれっぽいテンプレートがあります。
必要そうなブロックを定義してみます。アプリケーションのコードベースを汚さないよう、プロジェクト用のテンプレートディレクトリを定義します。
$ mkdir templates
$ touch templates/base.html
wt/templates/base.html
{% block extra_head %}
{% endblock %}
{% block content %}
{% block tabcontent %}
{% endblock %}
{% endblock %}
wt/settings.py
import os
BASE_DIR = os.path.dirname(__file__)
TEMPLATE_DIRS = (
os.path.join(BASE_DIR,'templates'),
)
再びhttp://localhost:8000/を開くと…なんかでた。
んー。adminでリポジトリを設定しないといけないっぽい。…いろいろあるな。
よくわからないまま、Source Repositoriesにデータを追加してみた。改めて、http://localhost:8000/を開くと…設定したリポジトリが出た!
リポジトリのリンクをクリックしてみると…オー!ノー!
なんだよー、markdownかよー。restructuredtextがいいぜー。projectmgr/templatetags/wiki.pyを書き換えればいいんだけどさぁ。美しくないよねぇ。
とりあえず、from markdown import markdownをコメントアウトすれば、こんな画面が出る。つか、wiki.pyでmarkdownの呼び出しをtry..exceptしてるのに、インポート文はベタかよっ><
結論。もう少しきちんとしてから使うか、なんとか仲間に入れてもらってまともにするか、だな。仲間に入れてもらうのは難しそうだなぁ。。。markdownが好きな人はもう少し踏み込んでみたらいいかも。 ドキュメントがなくて、django的な知識がないと辛いところ は突破した気がする。