1. ホーム
  2. python

[解決済み] Django がテンプレートを探したりロードしたりするのに使うパスは何ですか?

2023-01-06 19:23:33

質問

私は、次のような チュートリアル を Windows 7 環境で実行しています。

私の設定ファイルにはこのような定義があります。

TEMPLATE_DIRS = (
    'C:/django-project/myapp/mytemplates/admin'
)

を取得しました。 base_template をテンプレートから admin/base_site.html を、Django 自体のソースコードにあるデフォルトの Django admin テンプレートディレクトリ (django/contrib/admin/templates) 内から admin サブディレクトリに移動します。 myapp ディレクトリに移動するよう指示されましたが、なぜかうまくいきません。

何が問題なのか、何か手がかりはありますか?

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

これは Django のチュートリアルには載っていませんし、恥ずかしながら、パス変数に相対パスを設定する方が良いのです。このように設定すればいいのです。

import os.path

PROJECT_PATH = os.path.realpath(os.path.dirname(__file__))

...

MEDIA_ROOT = os.path.join(PROJECT_PATH, 'media/')

TEMPLATE_DIRS = [
    os.path.join(PROJECT_PATH, 'templates/'),
]

この方法で、Django プロジェクトを移動しても、パスルートは自動的に更新されます。これは、本番サーバをセットアップするときに便利です。

次に、 TEMPLATE_DIRS のパスが何か怪しいです。これはテンプレート ディレクトリのルートを指すはずです。また、それは末尾の / .

ここで推測するに、このように .../admin/ ディレクトリがテンプレートルートでないことを推測します。もしまだ絶対パスを書きたいのであれば、管理者テンプレートディレクトリへの参照を削除する必要があります。

TEMPLATE_DIRS = [
    'C:/django-project/myapp/mytemplates/',
]

とはいえ、テンプレートローダーはデフォルトで、テンプレートファイルを見つけるためにアプリのディレクトリを再帰的にたどるように設定されているはずです。

TEMPLATE_LOADERS = [
    'django.template.loaders.filesystem.load_template_source',
    'django.template.loaders.app_directories.load_template_source',
    # 'django.template.loaders.eggs.load_template_source',
]

特に何かを上書きしたい場合を除き、管理者テンプレートをコピーする必要はないはずです。

まだ syncdb を実行していないのであれば、実行する必要があります。また、runserver を通して django をホストしている場合、メディアファイルを静的にサーバーに置く必要があります。