1. ホーム
  2. ジャンゴ

[解決済み】Django TemplateDoesNotExist?

2022-05-05 12:12:39

質問

私のローカルマシンはUbuntu 8.10上でPython 2.5とNginxが動作しており、Djangoは最新の開発トランクからビルドされています。

URLをリクエストするたびに、スローされます。

TemplateDoesNotExist at /appname/path appname/template_name.html

Djangoはこれらのテンプレートをこの順番でロードしてみました。 * ローダ django.template.loaders.filesystem.function を使っています。 * ローダ django.template.loaders.app_directories.function を使う。

TEMPLATE_DIRS ('/usr/lib/python2.5/site-packages/projectname/templates',)

を探しているのでしょうか? /usr/lib/python2.5/site-packages/projectname/templates/appname/template_name.html この場合は?奇妙なことに、このファイルはディスク上に存在しています。なぜ Django はそれを見つけることができないのでしょう?

私はUbuntu 9.04上のPython 2.6で同じアプリケーションをリモートサーバー上でこのような問題なく実行します。他の設定も同じです。

私のローカルマシンに何か設定ミスがあるのでしょうか、それともこのようなエラーを引き起こす可能性のあるものを調べる必要があるのでしょうか?

私の settings.py を指定しました。

SETTINGS_PATH = os.path.normpath(os.path.dirname(__file__))
# Find templates in the same folder as settings.py.
TEMPLATE_DIRS = (
    os.path.join(SETTINGS_PATH, 'templates'),
)

以下のファイルを探しているはずです。

  • /usr/lib/python2.5/site-packages/projectname/templates/appname1/template1.html
  • /usr/lib/python2.5/site-packages/projectname/templates/appname1/template2.html
  • /usr/lib/python2.5/site-packages/projectname/templates/appname2/template3.html
  • ...

上記のファイルはすべてディスク上に存在します。

解決済み

試してみたところ、動作するようになりました。

chown -R www-data:www-data /usr/lib/python2.5/site-packages/projectname/*

不思議ですね。リモートサーバーでこんなことしなくても動くんですけどね。

どのように解決するのですか?

最初の解決策 :

これらの設定

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

は、Django が以下のテンプレートを見ることを意味します。 templates/ ディレクトリを作成します。

あなたのDjangoプロジェクトは、次の場所にあると仮定します。 /usr/lib/python2.5/site-packages/projectname/ を設定すると、django はテンプレートを /usr/lib/python2.5/site-packages/projectname/templates/

そこで、その場合、テンプレートをこのような構造に移動させたいと思います。

/usr/lib/python2.5/site-packages/projectname/templates/template1.html
/usr/lib/python2.5/site-packages/projectname/templates/template2.html
/usr/lib/python2.5/site-packages/projectname/templates/template3.html

第二の解決策 :

それでもうまくいかない場合は、settings.pyでアプリをこのように設定していると仮定します。

INSTALLED_APPS = (
    'appname1',
    'appname2',
    'appname3',
)

デフォルトでは、Django はテンプレートを以下の場所にロードします。 templates/ ディレクトリの下にインストールされます。そこで、このディレクトリ構造で、テンプレートを以下のように移動させたいと思います。

/usr/lib/python2.5/site-packages/projectname/appname1/templates/template1.html
/usr/lib/python2.5/site-packages/projectname/appname2/templates/template2.html
/usr/lib/python2.5/site-packages/projectname/appname3/templates/template3.html

SETTINGS_PATH はデフォルトでは定義されていないかもしれません。 その場合は、(settings.pyで)定義する必要があります。

import os
SETTINGS_PATH = os.path.dirname(os.path.dirname(__file__))