View All Posts. MiCHiLU.com powered by Django ;-)

[Django]: Django和訳ドキュメント sync to r5442

Django オンラインドキュメント和訳 更新しました。 Revision 5442 (2007/06/08). 「"django.contrib" 下のアドオン」「データベース API - オブジェクトへの変更を保存する」「やや複雑な組み込みフィールドクラス」「カスタム SQL の実行」「mod_python - 基本的な設定」「テンプレート言語ガイド - フィルタ」についての記述が更新されています。

以下、 diff -r 5418:5442 の主な変更分です。

"django.contrib" 下のアドオン

これらのコードは Django 配布物中の django/contrib にあります.このドキュ メントでは, contrib 下のパッケージをざっと解説し, パッケージを利用する ときに必要な依存関係について説明します.

オブジェクトへの変更を保存する

ForeignKey フィールドの更新も同様で,適切な型のオブジェクトを代入して保 存します

joe = Author.objects.create(name="Joe")
entry.author = joe
entry.save()

外部キーに代入するオブジェクトの型を間違えると,Django はエラーを出します.

簡単な例

入力値がカンマで区切られたメールアドレスになっていて,少なくとも一つアドレ スが入っているかどうか検証するカスタムフィールドの例を以下に示します.簡単 のため,個々のメールアドレスの検証は is_valid_email() という関数で行っ ていることにします.クラスの全体像は以下のようになります

from django import newforms as forms

class MultiEmailField(forms.Field):
    def clean(self, value):
        emails = value.split(',')
        for email in emails:
            if not is_valid_email(email):
                raise forms.ValidationError('%s is not a valid e-mail address.' % email)
        if not emails:
            raise forms.ValidationError('Enter at least one e-mail address.')
        return emails

件の ContactForm の例を使って,上のカスタムフィールドをフォームで使って みます.以下のように, forms.EmailFieldMultiEmailField に置き換 えてください

class ContactForm(forms.Form):
    subject = forms.CharField(max_length=100)
    message = forms.CharField()
    senders = MultiEmailField()
    cc_myself = forms.BooleanField()

カスタム SQL の実行

connectioncursor は標準の Python DB-API が提供する機能の (トランザクションの扱い を除いた) ほとんどを実装しています. Python DB-API に詳しくないのなら,上の SQL 文の cursor.execute() でパラ メタを直接 SQL に入れるのではなく,プレースホルダ "%s" を使っていること に注意して下さい.このテクニックを使うと,根底にあるデータベースライブラリ は必要に応じて自動的にパラメタをクオートしたりエスケープ処理したりします. (また,Django はプレースホルダ文字として SQLite の Python バインディングが 使っている "?" ではなく "%s" を使うので注意してください.これは インタフェースに一貫性をもたせるための設計です.)

基本的な設定

また, Django プロジェクトを PYTHONPATH に追加するよう設定している場合 には,以下のような設定を mod_python に教えておく必要があります:

<Location "/mysite/">
    SetHandler python-program
    PythonHandler django.core.handlers.modpython
    SetEnv DJANGO_SETTINGS_MODULE mysite.settings
    PythonDebug On
    PythonPath "['/path/to/project'] + sys.path"
</Location>


PythonPath "['/path/to/project'] + sys.path"

フィルタ

フィルタによっては引数をとります.フィルタの引数は {{ bio|truncatewords:"30" }} のような形式で表します.この例では,変数 bio の最初の 30 語を表示します.

フィルタの引数にスペースが入っている場合は,二重引用符で囲ってください. 例 えば,カンマとスペースでリストを結合するには {{ list|join:", " }} のようにします.

Sat, 9 Jun 2007 08:06:39 +0900 source edit
Creative Commons License
This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 2.1 Japan License.
View All Posts. MiCHiLU.com powered by Django ;-)