FAQ: Django を使う

DJANGO_SETTINGS_MODULE のインポートにまつわるエラーが出るのですが、なぜですか?

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

  • 環境変数 DJANGO_SETTINGS_MODULE が完全指定の Python モジュールになっている (例: mysite.settings)。

  • その設定モジュールは sys.path の上にありますか (import mysite.settings はうまくいきますか)。

  • モジュールに構文エラーがないこと。

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

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

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

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

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

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

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

  1. 設定ファイル内で MEDIA_ROOT を指定します。この値は、 Django がアップロードされたファイルを置く場所にします (パフォーマンス上の理由から、ファイルをデータベースに置くことはありません)。 MEDIA_URL をそのディレクトリの公開 URL にします。ディレクトリは Web サーバのユーザアカウントに対して書き込み可能にしておかねばなりません。

  2. モデルに FileFieldImageField を追加し、 upload_to オプションを定義して、 MEDIA_ROOT のどのサブディレクトリにファイルをアップロードさせるのかを Django に教えます。

  3. データベースに保存されるのは、ファイルの (MEDIA_ROOT からの相対で表した) パスだけです。 URL を調べるには、 Django の提供し ている属性 url を使うことになるでしょう。例えば、 mug_shot という名前の ImageField を作ったなら、テンプレートで画像の URL を指定するには {{ object.mug_shot.url }} と書きます。

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

どのテンプレートでも同じデータを扱うことがたまにあります。よくある例は、動的生成のメニューです。一見、共通のディクショナリをテンプレートコンテキストに入れておくのが合理的に見えます。

Django では、RequestContext を使うのが一番の方法です。詳しくはコンテキストのサブクラス RequestContext を使う を参照してください。

Back to Top