FAQ: Django を使う

revision-up-to:17812 (1.4)

DJANGO_SETTINGS_MODULE の import にまつわるエラーが出るのですが、なぜですか?

以下の点を確認してください:

  • 環境変数 DJANGO_SETTINGS_MODULE が完全指定の Python モジュール名になっ ていますか (たとえば “mysite.settings”)。
  • 設定モジュールは sys.path の上にありますか (import mysite.settings はうまくいきますか)。
  • (言うまでもなく) モジュールに構文エラーはありませんか。
  • mod_python を使っていて、Django リクエストハンドラは 使っていない のなら、 SetEnv に関わる mod_python のバグを回避する必要がありま す。 Django から何らかのモジュールを import する前に、以下のコードを 実行してください:

    os.environ.update(req.subprocess_env)
    

    (req は mod_python のリクエストオブジェクトです)。

テンプレート言語を好きになれません。どうしても使わないとだめですか?

私達はこのテンプレートエンジンをchunky bacon 以来の傑作だと思っているんで すが、テンプレート言語の選択というものは宗教に近いものがあるということは認 識しています。 Django では、テンプレート言語に対する制限はなんらありません。 ですから、 ZPT や Cheetah などを使いたいのなら、それは自由です。

付属のモデル/データベースレイヤを使わねばならないのですか?

いいえ、テンプレートシステムと同様、モデル/データベースレイヤはフレームワー クの他の部分と脱カップリングしています。

唯一の例外: 別のデータベースライブラリを使った場合には、 Django の自動生成 admin サイトを利用できなくなります。 admin だけは Django のデータベースレイ ヤとカップリングしています。

画像やファイルのフィールドはどう使うのですか?

モデルで FileFieldImageField を使うには、いくつかのステップを踏む 必要があります:

  1. 設定ファイル内で MEDIA_ROOT を指定します。この値は、 Django がアップロードされたファイルを置く場所にします (パフォーマン ス上の理由から、ファイルをデータベースに置くことはありません)。 MEDIA_URL をそのディレクトリの公開 URL にします。ディレク トリは Web サーバのユーザアカウントに対して書き込み可能にしておかね ばなりません。
  1. モデルに FileFieldImageField を追加し、 upload_to オプションを定義して、 MEDIA_ROOT のどのサブディレクトリにファイルをアップロード させるのかを Django に教えます。
  1. データベースに保存されるのは、ファイルの (MEDIA_ROOT か らの相対で表した) パスだけです。 URL を調べるには、 Django の提供し ている属性 url を使うことになるでしょ う。例えば、 mug_shot という名前の ImageField を作ったなら、テンプレートで画 像の URL を指定するには {{ object.mug_shot.url }} と書きます。

どうやったら、全てのテンプレートで使えるような変数を定義できますか?

どのテンプレートでも同じデータを扱うことがたまにあります。よくあるのは、メ ニューを動的に生成して出す場合です。この手の例では、どのテンプレートでも使 データの入った辞書をテンプレートコンテキストに入れておくのが合理的ですね。

RequestContext を使うのが正解です。詳しくは コンテキストのサブクラス: RequestContext を参照してください。