web-dev-qa-db-ja.com

Djangoテンプレートが見つかりません

Djangoの問題があり、テンプレートの検索で問題が発生することがあります。何時間も正常に実行された後、突然特定のテンプレートを提供できなくなります。問題が自動的に修正されることもありますが、 常にtouch <template>を実行することで修正されます。私の現在の解決策は、毎分touch <project root>を実行するcronジョブであり、cronが維持されている限り機能します。私の問題に対する適切な解決策を見つけ出します。

関連する設定:

PROJECT_ROOT = os.path.dirname(__file__)
APPS_ROOT = os.path.abspath(os.path.join(PROJECT_ROOT, "apps"))

TEMPLATE_LOADERS = (
    'Django.template.loaders.filesystem.Loader',
    'Django.template.loaders.app_directories.Loader',
)
TEMPLATE_DIRS = (
    (PROJECT_ROOT + '/templates'),
)
TEMPLATE_CONTEXT_PROCESSORS = (
    "Django.contrib.auth.context_processors.auth",
    "Django.core.context_processors.request",
    "Django.core.context_processors.i18n",
    "Django.contrib.messages.context_processors.messages",
    "base_site.context_processors.app_list"
)

STATICFILES_FINDERS = (
    'Django.contrib.staticfiles.finders.FileSystemFinder',
    'Django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
11
Astraub

したがって、私の問題はDjango自体ではなく、私の環境にあることがわかりました。私はDjangoサーバーを〜/ Django-projectから実行していて、開発者サーバーは、すべてのセッションがサインアウトされるとホームディレクトリを暗号化します。これは、サービスがホームディレクトリを見つけられなくなったことを意味します。プロジェクトを/ var /に移動し、manage.py runserverコマンドをデーモン化することで、プロジェクトにTemplate Does NotExistエラーが発生しなくなりました。

1
Astraub

Template Does Not Existエラーが発生する可能性のある別のケースを追加したかっただけです。

INSTALLED_APPSファイル内のsettings.py変数にアプリが追加されていることを確認してください。 startappコマンドでは不十分です。

INSTALLED_APPS = [
    'Django.contrib.admin',
    'Django.contrib.auth',
    'Django.contrib.contenttypes',
    'Django.contrib.sessions',
    'Django.contrib.messages',
    'Django.contrib.staticfiles',
    'myappname', # add your app here :)
]

ばかげていることは知っていますが、シートベルトを締め忘れたために運転免許試験に合格しなかった人もいるので、コード行を忘れることは思ったほど珍しいことではありません。

28
TGO

次のように設定を更新してみてください。

PROJECT_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

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

(これは、Django 1.8でBASE_DIRを取得するデフォルトの方法です。)Python 3.4、__file__は絶対ファイルパスを与えることを保証しません。

また、ディレクトリを文字列として追加するのではなく、os.path.joinを使用して、プラットフォームに依存しないようにする必要があります(他のプラットフォームでは円記号を使用します)。

4
kleinsbeer