FAQ: Django を使う

Why do I get an error about importing DJANGO_SETTINGS_MODULE?

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

  • The environment variable DJANGO_SETTINGS_MODULE is set to a fully-qualified Python module (i.e. mysite.settings).
  • その設定モジュールは sys.path の上にありますか (import mysite.settings はうまくいきますか)。
  • モジュールに構文エラーはありません。

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

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

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

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

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

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

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

  1. In your settings file, you'll need to define MEDIA_ROOT as the full path to a directory where you'd like Django to store uploaded files. (For performance, these files are not stored in the database.) Define MEDIA_URL as the base public URL of that directory. Make sure that this directory is writable by the web server's user account.
  2. モデルに FileFieldImageField を追加し、 upload_to オプションを定義して、 MEDIA_ROOT のどのサブディレクトリにファイルをアップロードさせるのかを Django に教えます。
  3. データベースに保存されるのは、ファイルの (MEDIA_ROOT からの相対で表した) パスだけです。 URL を調べるには、 Django の提供し ている属性 url を使うことになるでしょう。例えば、 mug_shot という名前の ImageField を作ったなら、テンプレートで画像の URL を指定するには {{ object.mug_shot.url }} と書きます。

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

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

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