この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:1
ページ更新者:爽健
更新日時:2018-12-17 03:16:01

タイトル: テンプレートの名前の重複について
SEOタイトル: djangoにおけるテンプレート名の重複について(同名のhtml)

この記事の要点
  • Django のテンプレート名重複問題
  • デフォルト: Django はプロジェクト全体の templates フォルダを順に検索するので、同名テンプレートが衝突する
  • 対処: アプリ名のサブフォルダを必ず作る (templates/myapp/index.html)
  • View 側で render(request, "myapp/index.html")パス込みで指定

 

template_name = 'index.html'

return render(request, template_name)

djangoにおいて上記の様に単にindex.htmlを指定するだけでは非常に危険です。

djangoは自動的にルートディレクトリおよびアプリケーションディレクトリ直下とtemplatesフォルダ内のテンプレート名を取得します。

もし仮に異なるアプリ間で同名のindex.htmlが存在すると、意図しないindex.htmlが読み込まれる可能性があります。

従ってテンプレート名を指定する場合はアプリケーション名込みで指定する必要があります。

 

まずテンプレートディレクトリの配置構造を以下の様にしましょう。

プロジェクト名/
    manage.py
    アプリケーション名/
        template/
            アプリケーション名/
                index.htm

少し冗長的ですが、静的ファイルのディレクトリ構造と同様にテンプレートも上記のような構造にする必要があります。

ビューからの呼び出しは以下の様に指定します。

template_name = 'calculator/index.html'

return render(request, template_name)