django-projectmgrを動かしてみる

2009年04月09日(木) 01:10 この記事をクリップ!

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/を開きます!

http://img.skitch.com/20090408-dpynbh7ua3a12kd886jhwu5k58.jpg

あれれれれ?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/を開くと…なんかでた。

http://img.skitch.com/20090408-ees2rb8bqdipq567329h5ahwp1.jpg

んー。adminでリポジトリを設定しないといけないっぽい。…いろいろあるな。

http://img.skitch.com/20090408-8twt13nq9dnqu2nrq8ej6mds3q.jpg

よくわからないまま、Source Repositoriesにデータを追加してみた。改めて、http://localhost:8000/を開くと…設定したリポジトリが出た!

http://img.skitch.com/20090408-qib7m67gik6484kcn5ghn841mi.jpg

リポジトリのリンクをクリックしてみると…オー!ノー!

http://img.skitch.com/20090408-8d6gdxsmrbrs65wkj1tw97djde.jpg

なんだよー、markdownかよー。restructuredtextがいいぜー。projectmgr/templatetags/wiki.pyを書き換えればいいんだけどさぁ。美しくないよねぇ。

とりあえず、from markdown import markdownをコメントアウトすれば、こんな画面が出る。つか、wiki.pyでmarkdownの呼び出しをtry..exceptしてるのに、インポート文はベタかよっ><

http://img.skitch.com/20090408-ts88ypm928u6n2wkdf3kdukds3.jpg

結論。もう少しきちんとしてから使うか、なんとか仲間に入れてもらってまともにするか、だな。仲間に入れてもらうのは難しそうだなぁ。。。markdownが好きな人はもう少し踏み込んでみたらいいかも。 ドキュメントがなくて、django的な知識がないと辛いところ は突破した気がする。


 
ponybadge

Powered by

Feedbacks

Tweets

Tags

Calendar