Python

unique togetherを指定したモデルのエラーメッセージのカスタマイズ

※Django1.6だと「validate_uniqueメソッドをオーバーライド」でエラーが発生するみたいなので、ご注意ください。

Djangoにはdjango.forms.ModelFormという、DBのモデルに対応したフォームを作成する機能があります。この記事では、フォームの元となるモデルにunique_togetherを指定した場合の、バリデーションエラーのメッセージをカスタマイズする方法を3つ紹介しています。そのカスタマイズ方法の柔軟性ですが、3番目が一番が高く、次に2番目・1番目と続きます。

read more »

Tips

vimでDjangoのテンプレートを開いたときに色を付ける方法

今まで、vimでDjangoのテンプレートファイルを編集する際に、タグに色が付いているときと付いていないときがありました。調べた結果、これは「filetype」が「html」か「htmldjango」の違いでした。なので、色が付いていない場合、vimで「:set ft=htmldjango」と打てば色が付くようになります。
read more »

Python

django1.4におけるSITE_ROOTの定義

djangoを使ってサイトを構築する場合、「settings.py」にて、プロジェクトのルートディレクトリのパスを定義して、そこから相対パスでテンプレートディレクトリを指定するテクニックがあります。ただし、django1.4にて同じことをやろうとする場合、「settings.py」の場所が変更されたので、ルートディレクトリの定義を変更する必要があります。

--- settings.py ---

import os
# django1.3まで
# SITE_ROOT = os.path.dirname(os.path.realpath(__file__))

# django1.4
SITE_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), os.path.pardir))

この方法で定義しておくと、「SITE_ROOT」がきちんとプロジェクトのルートを指すようなり、ルート直下においた「templates」などは以下のように指定することができるようになります。

--- settings.py ---

TEMPLATE_DIRS = (
    os.path.join(SITE_ROOT, 'templates'),
)

※ 勿論django1.3の「SITE_ROOT = os.path.dirname(os.path.realpath(file))」で、「templates」等のディレクトリを「settings.py」と同じディレクトリにすれば問題なく動きます。ただ「locale」ディレクトリをプロジェクトルートに置きたかったので、「templates」ディレクトリ等も今まで通りの場所に置こうと思いました。